这是我第一次编写一个非常基本的JavaScript库,现在我打算发布它。我将它作为一个函数编写,用户可以通过CDN简单地导入JavaScript文件。我也打算把它发布到NPM,这样用户就可以把它和JS捆绑程序一起使用了。
我创建了另一个文件来匹配node.js格式,基本上,我在函数之前添加了module.exports=
,这一切都起作用了。所以,现在我得到了两个代码基本相同的文件,一个用于CDN,一个用于NPM。有没有办法把这个统一起来,基本上都合并在同一个文件里?
我真的很想知道这通常是怎么做的。当一个函数被写入以作为CDN导入时,它如何被转换成节点模块?创建一个单独的文件是唯一的方法,还是我遗漏了什么?
这个问题很容易通过谷歌搜索得到答案,但我认为这是一个有趣且写得很好的问题,所以我在这里转录一些结果来帮助其他人:
从这篇博文来看:
UMD
UMD(Universal Module Definition)是一个代码块,我们可以用来包装我们的库。这段代码使得在前端和节点中都可以使用库。
它看起来是这样的:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['b'], factory);
} else if (typeof module === 'object' && module.exports) {
// Node.
module.exports = factory(require('b'));
} else {
// Browser globals (root is window)
root.returnExports = factory(root.b);
}
}(typeof self !== 'undefined' ? self : this, function (b) {
// Use b in some fashion.
// Just return a value to define the module export.
// This example returns an object, but the module
// can return a function as the exported value.
return {};
}));
你可以在这里阅读更多关于UMD的内容。
通常,我会建议您使用绑定程序/构建工具来为您自动化这一点,并使代码在更多的环境中可用。
Webpack是一个很好的选择。