可以在浏览器和node.js中使用的多文件JavaScript库的devise模式
我写了一个主要用于浏览器的库。 现在我也想用node.js这个库。
我的库包含多个文件,如:
loremIpsum.core.js:
loremIpsum = {}; loremIpsum.a = function(){ //Important code } loremIpsum.b = function(){ //Important code }
然后还有其他文件依赖loremIpsum
因为他们必须使用a
或b
函数。 喜欢:
loremIpsum.dolor.js:
loremIpsum.dolor = loremIpsum.a(); loremIpsum.dolor.x = function(){ //Important code } loremIpsum.dolor.y = function(){ //Important code }
我不知道如何使用该代码与node.js。 当我需要这样的文件:(假装我已经分配exports
loremIpsum
)
var loremIpsum = require("loremIpsum.core.js"); require("loremIpsum.dolor.js");
问题是loremIpsum.dolor.js
不会工作,因为loremIpsum
没有定义。
我已经阅读了一些图书馆,并要求JS,但我不想使用这样的图书馆。 有什么好方法吗?
我find了一个解决scheme。 我不知道是否有什么缺点,但效果很好。
我在博客上写了关于解决scheme的文章: http : //www.zujab.at/2014/09/pattern-for-a-multiple-file-javascript-library-for-the-browser-and-node-js /
主要代码是:
核心文件包含这个方法:
nowClean.load = function (lang){ if(typeof require === 'undefined'){ throw "nowClean.load may only be used with node.js"; } var path = require('path'); require(__dirname + path.sep + "nowClean." + lang + ".js")(this); };
一个“扩展名”文件:
var nowCleanExt = function (nowClean){ nowClean.css = nowClean.create(function (code){ /* ... */ }); /* ... */ }; if(typeof nowClean !== 'undefined'){ nowCleanExt(nowClean); } if(typeof module !== 'undefined'){ module.exports = nowCleanExt; }
然后在节点主脚本中:
var nowClean = require("nowClean"); nowClean.load("css");