我正在创建一个 javascript 库,我希望它与环境无关(它不会使用 DOM、AJAX 或 NodeJS api。它将是普通的 javascript)。因此,它应该可以在任何 javascript 环境中运行(浏览器、npm、meteor 智能包、V8 C 绑定...)。
我目前的方法是使用库创建 git 存储库,将所有库都放在一个全局变量中,而不考虑像 CommonJS 或 AMD 这样的模式。
稍后,我将创建另一个 git 存储库,使用我的库作为 git 子模块,并创建将其作为 npm 模块发布所需的内容。我担心这是否是一个好方法,我没有发现有人这样做。
优点:代码将是普通的 JavaScript,无需了解环境模式。它不会将自身绑定到 CommonJS。它将可重新打包(复制并粘贴或 git 子模块)到任何 javascript 环境。它将根据发送到浏览器所需的大小而定。
缺点:我必须维护与我想要支持的环境一样多的 git。至少有第二个 git 存储库可以在 npm 上交付。
以jQuery为例,它可以在浏览器和nodejs中运行,只有一个git repo。有一些代码需要注意“exports”变量才能在 Nodejs 或其他 CommonJS 兼容环境上运行。
优点:只需维护一个 git 存储库。
缺点:它将绑定到 CommonJS 模式(以实现 npm 兼容性)
我的问题是:我是否遵循正确(或可接受)的方法?或者我应该遵循 jquery 的路径,并尝试创建一个 git 存储库?
更新1:
浏览器化和别的require()
图书馆不是有效的答案。我的问题不是如何使用require()
相反,在浏览器上,它是关于实现环境不可知论的架构模式。
更新2:
创建浏览器/nodejs模块不是问题, 它被称为 https://stackoverflow.com/questions/7327164/common-module-in-node-js-and-browser-javascript。问题是:可以制作一个真正的环境无关库吗?此示例绑定到 CommonJS 模式,在 NodeJS 中使用。
如果您正在为未来的图书馆工作寻找设计建议,那么在我看来,您可以思考未来,并使用在其他语言、系统和库中得到充分证明的常用面向对象实践。
主要关注设计的 UML 视图。
忘记“一个变量”的要求。
使用计划中的下一版本 JavaScript 中建议的功能。
- http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes
- http://wiki.ecmascript.org/doku.php?id=harmony:modules_rationale http://wiki.ecmascript.org/doku.php?id=harmony:modules_rationale
即使在今天,也有一个实验性的编译器可以让您编写 ES6 风格的代码(请参阅https://www.npmjs.org/package/es6-module-transpiler-rewrite https://www.npmjs.org/package/es6-module-transpiler-rewrite).
Node.js 有一个--harmony
允许相同的命令行开关(请参阅`node --harmony` 有什么作用? https://stackoverflow.com/questions/13351965/what-does-node-harmony-do)
所以我认为正确的做法是遵循最佳实践并“思考未来”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)