是否有可能转换requirejs模块CommonJS的?(Is it possible to con

2019-08-05 13:22发布

它已经可以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() {
     }
};

编辑: 转换也是可能的。



文章来源: Is it possible to convert requirejs modules to commonjs?