重构一个用户脚本来使用JavaScript模块

我正在处理一个用户脚本 – 特别是这个用户脚本 – 它被devise用来封装模块中的function。 为了能够做一些自动化testing,我想将模块分割成它们自己的文件,并使用node.js的模块导出,并要求将函数合并成一个文件,以便在Greasemonkey或简单的浏览器扩展中使用。

我的第一个想法是把模块复制到自己的文件中

module.js

var exportedModule = (function (){ var Module = { // public functions and members }; //private functions and members return Module; }()); module.exports = exports = exportedModule; 

然后有一个中央文件,需要这些模块中的每一个,也许用像Browserify这样的东西编译它们。

的script.js

 var importedModule = require(./module); importedModule.init(); 

这可能吗?

在我看来,使用Requirejs会更好,它使用AMD风格的模块,本质上它更适合浏览器。 节点commonjs风格的模块是同步的,并不适合浏览器模型很好。

当然,使用requirejs会改变你的脚本。

这是可能的,而且Browserify使得它变得简单:

 browserify src/my.user.js -o dist/my.user.js 

源文件中的元数据可能会被移动,但仍然可以正确parsing(至less由Greasemonkey)。

有关编译各种资源(包括CSS和图像)的更复杂的示例,请参见此处 。

类似的方法可以用来模块化jQuery插件,也可能是浏览器扩展,尽pipe使用附加SDK构build的Firefox扩展不需要这种方法,因为它们本身支持require / npm。