编写和组织javascript插件的最佳做法是什么?
所以我有很多不同的javascript文件是相同的代码块,但我偶尔不得不更新,由于path的变化或其他各种条件。 现在复制并粘贴到新的文件工作正常,但恼人的执行。 有没有一种很好的方法来维护一个JavaScript文件与我的“插件”代码,并让它可以通过使用插件的其他JavaScript文件访问?
我正在寻找一个好的nodejs解决scheme和vanilla js解决scheme。 如果可以相互分享,那将是理想的,但不是以任何方式要求的。 理想情况下,我想在workspace/
托pipe我的工作区,并有一些文件夹, workspace/front-end-js/
和workspace/back-end-nodejs/
,能够在workspace/plugins/
插件运行代码我可以执行像MyPluginVar.Foo();
我知道一些系统,如节点的var foo = require('bar');
和前端浏览版本,但真的不知道我所有的select。 什么是编写和组织JavaScript插件的最佳方式?
–
编辑:我真的想避免npm,但它可能是最好的select。
您通常会将您的共享库和插件作为依赖项添加到项目的package.json
文件中,并使用npm进行安装。
使用module.exports
对象和require
function的CommonJS模块目前是事实上的标准。
使用export
和import
语句的ES2015模块是一个正在出现的正式标准,但对它们的支持尚不普遍。 如果你的环境支持他们,这是一个不错的select。
要在前端加载任何types的模块,您需要使用Webpack或Browserify等打包程序。
较老的JavaScript模块通常发布到全局范围( window
),并且是前端代码的简单选项。
如果您喜欢,也可以使用UMD(通用模块定义)包装器支持多个模块系统。 以下是UMD Github回购的一个例子,如果支持的话,可以利用CommonJS,而回到浏览器全球:
(function (root, factory) { if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { // CommonJS factory(exports, require('b')); } else { // Browser globals factory((root.commonJsStrictGlobal = {}), root.b); } }(this, function (exports, b) { // b represents some dependency // attach properties to the exports object to define // the exported module properties. exports.action = function () {}; }));