重构用户脚本以使用javascript模块

时间:2013-02-25 21:12:47

标签: javascript node.js module requirejs userscripts

我正在开发一个用户脚本 - 特别是this userscript - 用于封装模块中的功能。为了能够进行一些自动化测试,我想将模块拆分成自己的文件,并使用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();

这可能吗?

2 个答案:

答案 0 :(得分:2)

在我看来,你最好使用Requirejs,它使用AMD风格的模块,并且本身更适合浏览器。 Node commonjs-style模块是同步的,不能很好地适应浏览器模型。

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

答案 1 :(得分:1)

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

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

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

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

类似的方法可用于模块化jQuery插件,可能还有浏览器扩展,尽管使用Add-on SDK构建的Firefox扩展不需要这种方法,因为它们本身支持require / npm。