为浏览器和节点创建npm包

问题描述 投票:1回答:1

我正在尝试创建一个可供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可以为我解决这个问题,那就行了。

javascript node.js npm node-modules es6-modules
1个回答
2
投票

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

真正的问题是ES模块出口或commonJS出口。其中我目前支持CommonJS,因为ES模块本身并没有在nodejs中实现,所以你必须使用babel来轻松导入它们。

© www.soinside.com 2019 - 2024. All rights reserved.