今天看见一个基于CommonJS Modules/2.0的实现:BravoJS。
Modules/2.0目前还不是CommonJS的当前规范(Current Specifications),甚至连建议或开发中的标准(Proposals and standards in development)也都不是。
Modules/2.0的模块写法大概如下
1,定义模块用module标识符,它有一个方法declare
2,declare接受一个dependency(可选)和factory
3,dependency为数组类型,数组值为字符串或js对象
4,factory为函数类型,factory有三个参数require,exports,module
5,使用exports导出API
下面还是以之前介绍的cache,event,selector模块演示。
目录如下
cache.js不依赖于任何模块
module.declare(function(require, exports, module) { // ... exports.set = cache.set; exports.get = cache.get; exports.has = cache.has; exports.remove= cache.remove; });
event.js模块依赖于cache.js
module.declare(['js/cache'], function(require, exports, module) { var cache = require('js/cache'); // ... exports.bind = bind; exports.unbind = unbind; exports.trigger = trigger; });
selector.js模块不依赖与其它模块
module.declare(function(require, exports, module) { // ... exports.query = query; });
最后看看页面上怎么引入这些模块
<!doctype html> <html> <head> <title>基于CommonJS Modules/2.0的实现:BravoJS</title> <meta charset="utf-8"/> <script src="bravo.js"></script> </head> <body> <button> button test</button> <script> module.declare(['js/event', 'js/selector'], function(require, exports, module){ var E = require('js/event'); var $ = require('js/selector').query; var btn = $('button')[0]; E.bind(btn, 'click', function() { alert(this) }); }); </script> </body> </html>
将目录BravoJS拷贝到apache或其它web服务器上,访问index.html。
点击按钮,弹出了alert。说明这些模块都正常使用。
以上写法可以看出,Modules/2.0 与 Modules/Wrappings 更象。
相似点:
1,都使用module.declare声明模块
2,都有一个包裹factory,factory的三个参数都是require,exports,module
不同点:
1,Modules/2.0 不允许使用 对象直接量 或 返回值 导出模块,只能使用exports
2,Modules/2.0 的module.declare函数多了一个参数dependency
Modeles/2.0 获取依赖模块时可以通过dependency指定该模块的别名。以上示例event.js依赖于cache.js,可以修改如下
module.declare([{cache: 'js/cache'}], function(require, exports, module) { var cache = require('cache'); // ... exports.bind = bind; exports.unbind = unbind; exports.trigger = trigger; });
dependency的元素不是字符串而是一个js对象,cache是别名,“js/cache”是真正的id。这时在factory中直接可以使用别名cache获取该模块了(前面是使用id)。
也可以使用BravoJS载入普通的JS文件模块,通过module.load方法
module.load('js/module-a', function(){ })
但不能载入非本域的模块资源。
用过RequireJS的同学会发现,Modules/2.0的declare与AMD的define有点象,即dependency。神似啊!
与AMD不同的是dependency没有factory的参数一一对应。而是固定为require、exports、module。这明显没有AMD简洁,在factory中还需要require去拿依赖模块。BravoJS已经很久未更新过了,或许Modules/2.0尚未采纳就已死去。
相关:
http://code.google.com/p/bravojs
相关推荐
在JavaScript的开发环境中,我们经常会遇到各种错误,其中之一就是“Error in ./node_modules/axios/lib/platform/index.js”。这个错误提示通常意味着在项目中使用axios库时遇到了问题。Axios是一款非常流行的基于...
jvm-npm, 适用于JVM的兼容CommonJS模块加载器 JVM上Javascript运行时中的NPM... 实现基于 http://nodejs.org/api/modules.html,应该完全兼容。 当然,不包括完整的node.js API,因此不要期望依赖于它的所有标准NPM模块
// CommonJS const { normalizeURL , joinURL } = require ( 'ufo' ) // ESM import { normalizeURL , joinURL } from 'ufo' 注意:您可能需要转换软件包并为旧版环境添加URL polyfill 用法 normalizeURL 确保URL...
CommonJS Modules/2.0规范进一步细化了模块化规则,为Node.js和其他实现提供了标准化的接口。 JavaScript数据推送则是为了让Web应用能够实时接收服务器数据,避免频繁的Ajax轮询。Comet是一种基于HTTP长连接的...
// CommonJS: // const AnimateOnChange = require('react-animate-on-change').default // functional component const Score = ( props ) => < AnimateOnChange baseClassName = "Score" animationClassName...
ti-commonjs-wrap-plugin 模块允许在 Alloy 中使用风格的模块。 这个用于 Titanium CLI 的插件增加了对股票 Titanium SDK 代码的支持。 如何安装 检查模块并将其放置在 plugins/ti-commonjs-wrap-plugin 在您的 ...
在 CommonJS 和 AMD 环境之间共享代码的微小研究在我当前的项目中,我在服务器和浏览器之间共享大部分代码。 最初,我为此使用了定制的签名。 最终,它在构建单体应用时被证明存在问题。 r.js完全不理解,我所有的...
// CommonJS usage // const actionsCreator = require("actions-creator") const first_action = actionsCreator . MY . FIRST . ACTION ( "arg1" , "arg2" ) console . log ( first_action ) // { // type: "MY/...
CommonJS vs模块比较该存储库显示CommonJS( require , module.exports )和Module( import , export )节点实现之间的区别。 普通JS 模块观察与恢复即使代码是相同的,唯一的不同是导入,代码执行的顺序也大不...
除了AMD,`curl`还兼容CommonJS Modules/1.1规范,这是服务器端JavaScript模块化的一种标准。在CommonJS中,模块通过`module.exports`和`require`进行定义和引用。`curl`能够将服务器端的模块转换为浏览器可用的形式...
commonjs-friendly-angular2 为 CommonJS 友好自动构建 Angular 2 ... 全部完成后,您可以随意使用内容的./node_modules/commonjs-friendly-angular2/products/ :)(例如,在 Browserify 等中使用) 执照 麻省理工学院
1. `javascript/auto`: 默认选项,支持 CommonJS、AMD 和 ESM 模块系统。 2. `javascript/esm`: 仅支持 EcmaScript 模块(适用于 .mjs 文件)。 3. `javascript/dynamic`: 不支持 CommonJS 和 ESM。 4. `json`: 用于...
nashorn-commonjs-modules, CommonJS的模块支持 Nashorn CommonJS模块支持 Nashorn这个库增加了对CommonJS模块( aka require ) inside的支持( Nashorn脚本引擎) 。 它基于 NodeJS模块的规范,它支持从文件夹加载模块...
mocha是比较常用的node测试框架,但是只支持commonjs模块,要让mocha支持ES6模块,需要babel的帮助。 书写本文时用到的工具版本为: babel v7 mocha v6.2 安装依赖 $ npm i -D @babel/cli @babel/core @babel/...
TestCafé样板 使用 , 和端到端测试自动化样板。 克隆或派生此存储库。 入门 1. git clone git@github.... cd testcafe-commonjs-chai-expect 3. npm install 4. npm run test 有关更多样板,请单击
简单的单页应用程序结构。 立即即时打包/编译文件。 只适用于Mac / Linux / Windows。 一键式服务器渲染。 ###安装 您只需要开始git / node / npm就可以了。...npm install # install dependencies. ...
CommonJS / Webpack 它应该工作。 导出的构造函数与Phaser.SpriteGUI相同。 嵌入式安装 在游戏脚本之前添加和 。 利用 // In create(): var sprite = game . add . sprite ( ) ; // … var gui = new Phaser . ...
// commonjs users: var app = angular . module ( 'my-app' , [ require ( 'angular-localforage-migrations' ) ] ) // everyone else: var app = angular . module ( 'my-app' , [ 'angular-localforage-...
基于的Node / CommonJS包生成器。 安装/使用 npm install -g sprout sprout add commonjs-lib https://github.com/wilmoore/sprout-commonjs-lib sprout init commonjs-lib my-new-lib 注意:您可以传递相对路径...