为浏览器和节点创建 npm 包

Creating npm package for both browser and node

我正在尝试创建一个可供网络应用程序或其他节点模块使用的 npm 包。

如果我只支持浏览器,我会分配给 window window.myExport = myExport;(除非有更现代的方式我不知道?)。

如果我只支持节点模块,我会使用导出,module.exports = myExport;(同样,如果有更好的方法我不知道,请告诉我)。

但我想支持两者。目前,我正在做的是

var window, module;
if (window)
    window.myExport = myExport;
if (module)
    module.exports = myExport;

这看起来很丑陋,但目前有效。 什么是更好的方法? 这是一个非常轻量级的节点模块,所以除非不可避免,否则我不想引入像 webpack 之类的构建器。我已经在使用 babel 创建我的代码的 es5 兼容版本,所以如果 babel 可以为我解决这个问题,那就行得通了。

如果有人已经在使用 npm 来管理他们的依赖关系,那么可以合理地假设他们将使用 webpack 或 browserify 之类的东西来允许他们 import/require 模块。有人从 NPM 下载库并手动将其包含在他们的页面中是不寻常的。我还认为 npm 库将自身添加到 window 对象是一种严重的违规行为。这可能会导致各种问题,尤其是当您的库的不同版本包含在同一页面上时。

真正的问题是 ES 模块导出或 commonJS 导出。其中我目前更喜欢 CommonJS,因为 ES 模块还没有在 nodejs 中原生实现,所以你必须使用 babel 来轻松导入它们。