编写和组织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对象和requirefunction的CommonJS模块目前是事实上的标准。

使用exportimport语句的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 () {}; }));