And*_*een 8 commonjs requirejs
它已经可以CommonJS的模块转换成requirejs,但我还是想知道是否有可能做反向.有没有办法将requireJS模块转换为commonJS,而不是相反?
它是可能的,如果你使用uRequire,一个工具,我专门针对JavaScript的模块格式转换写道- AMD/Requirejs - > CommonJS的/的NodeJS和背面(加上更多).
它似乎是一个简单的AST操作和依赖解析@start,但模块格式在许多方面与语法不兼容:
依赖性/路径分辨率:CommonJS的使用fileRelative(例如"../PersonModel"),而AMD也可以使用包相对(例如,'型号/ PersonModel’)
执行环境:CommonJS的模块同步加载,而AMD是异步加载(AMD也具有异步require版本require(['dep1', dep2'], function(dep1, dep2){})作为其主要针对用于浏览器).
这些也是其他差异(例如AMD加载程序插件),但一般来说,针对每一个"锁定"您的格式..
uRequire使您能够在AMD还是CommonJS的创作,并转换为其它容易(或转换为UMD),从而享受模块化的Javascript没有样板.
手动,它应该是可能的.
一个require.js模块的样子:
define('module', ['dep1', 'dep2'], function(dep1, dep2) {
return myFunction = function() {
};
});
Run Code Online (Sandbox Code Playgroud)
导出到CommonJs模块不应该太难:
var dep1 = require('dep1');
var dep2 = require('dep1');
exports.myFunction = function() {
};
Run Code Online (Sandbox Code Playgroud)
您不必返回函数,它也可以是一个对象:
define('module', ['dep1', 'dep2'], function(dep1, dep2) {
return {
myFunction1: function() {
},
myFunction2: function() {
}
};
});
Run Code Online (Sandbox Code Playgroud)
...
var dep1 = require('dep1');
var dep2 = require('dep1');
exports.myObject = {
myFunction1: function() {
},
myFunction2: function() {
}
};
Run Code Online (Sandbox Code Playgroud)
编辑: 转换也是可能的.
对的,这是可能的。包括 Sound Cloud 在内的许多网站都开发了自己的转换工具。
Mozilla 开发了一个漂亮的小模块,称为 SweetJS。基本上允许您在 JavaScript 中定义宏。要在 Node.js 中使用,您需要使用它的二进制文件来实际使用宏,因为它在运行时不可用。
编辑:
Ember.js 的开发者之一 Yehuda发布了一个转译器模块。
它是用 Ruby 编写的,而不是 JavaScript,但也许有人会转换它。尽管如此,您可以通过分叉 ruby 进程在 Node.js 中使用它。
| 归档时间: |
|
| 查看次数: |
5440 次 |
| 最近记录: |