它已经可以CommonJS的模块转换成requirejs ,但我还是想知道是否有可能做反向。 有没有什么办法requireJS模块转换为CommonJS的,而不是相反?
Answer 1:
对的,这是可能的。 许多网站,包括声音的云都开发了自己的转换工具。
Mozilla已经开发了一个名为SweetJS一个可爱的小模块。 基本上可以让你在JavaScript中定义的宏。 要在Node.js的使用,你需要使用它的二进制实际使用宏,因为它通过运行时的不可用。
http://sweetjs.org/
编辑:
耶胡达的Ember.js的开发者之一已经发布了transpiler模块。
这是写在Ruby和JavaScript不,但也许有人会将其转换过来。 然而,你可以通过派生红宝石过程中Node.js的使用它。
Answer 2:
它是可能的,如果你使用uRequire ,一个工具,我专门针对JavaScript的模块格式转换写道- AMD / Requirejs - > CommonJS的/和的NodeJS背(还有更多)。
这似乎是一个可有可无的AST操纵与依赖分辨率@启动,但模块格式是不兼容的 ,从语法除了许多方面:
依赖性/路径分辨率 :CommonJS的使用fileRelative(例如“../PersonModel”),而AMD也可以使用包相对(例如,‘型号/ PersonModel’)
执行环境 :CommonJS的模块同步加载,而AMD是异步加载(AMD也具有异步
require
版本require(['dep1', dep2'], function(dep1, dep2){})
作为其主要是针对用于浏览器) 。
这也是其他差异(例如AMD加载器插件),但对每一个“锁”你该格式一般写作。 。
uRequire使您能够在AMD还是CommonJS的创作,并转换为其它容易(或转换为UMD),从而享受模块化的Javascript没有样板。
Answer 3:
手动,它应该是可能的。
一个require.js模块的样子:
define('module', ['dep1', 'dep2'], function(dep1, dep2) {
return myFunction = function() {
};
});
导出到CommonJS的模块不应该太难:
var dep1 = require('dep1');
var dep2 = require('dep1');
exports.myFunction = function() {
};
你不必返回一个功能,它可以是一个对象太:
define('module', ['dep1', 'dep2'], function(dep1, dep2) {
return {
myFunction1: function() {
},
myFunction2: function() {
}
};
});
...
var dep1 = require('dep1');
var dep2 = require('dep1');
exports.myObject = {
myFunction1: function() {
},
myFunction2: function() {
}
};
编辑: 转换也是可能的。