我正在开发一个用户脚本 - 特别是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();
这可能吗?
答案 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。