我正在尝试创建一个可供Web应用程序或其他节点模块使用的npm包。
如果我只支持浏览器,我只会分配到窗口window.myExport = myExport;
(除非有一种我不知道的更现代的方式?)。
如果我只支持节点模块,我只会使用export module.exports = myExport;
(再次,如果有更好的方式我不知道,请告诉我。)
但我想支持两者。目前,我正在做的是
var window, module;
if (window)
window.myExport = myExport;
if (module)
module.exports = myExport;
这看起来非常难看,但到目前为止还有效。 什么是更好的方法? 这是非常轻量级的节点模块,所以我不想引入一些像webpack这样的构建器,除非是不可避免的。我已经在使用babel来创建我的代码的es5兼容版本,所以如果babel可以为我解决这个问题,那就行了。
答案 0 :(得分:2)
如果有人已经在使用npm来管理他们的依赖关系,那么假设他们将使用webpack或browserify之类的东西来允许他们导入/需要模块是合乎逻辑的。有人从NPM下载库并手动将其包含在页面中是不常见的。我还认为npm库将其自身添加到窗口对象是一个严重的违规行为。这可能会导致各种问题,尤其是如果您的库的不同版本包含在同一页面上。
真正的问题是ES模块导出或commonJS导出。其中我目前支持CommonJS,因为ES模块本身并没有在nodejs中实现,所以你必须使用babel来轻松导入它们。