当前位置: 首页 > 知识库问答 >
问题:

为浏览器和节点创建npm包

申屠飞
2023-03-14

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

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

如果我只支持节点模块,我将只使用export,module.exports=myExport (同样,如果有更好的方法我不知道,请让我知道)。

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

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

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


共有1个答案

罗安宁
2023-03-14

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

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

 类似资料:
  • 我在Node.js和browser中使用了一个内部库。它有许多文件,连接着一个Grunt任务和不同的序言,一个用于浏览器,一个用于节点: 浏览器: 节点: 这导致2个不同的单一输出js文件,一个用于浏览器,一个用于节点。 我想要什么 使用打字脚本 如果可能,对浏览器和节点仅使用一种CommonJS语法(或ES6模块) 投资于未来几个月不会死亡的东西 更模块化一点(可能有人只需要lib的一部分) 是

  • 问题内容: 我如何在客户端使用 HTML5 , CSS 和 JavaScript 编写网站,以便 在页面加载后 允许 客户端浏览器之间的直接tcp / ip连接 。 我需要这样做以减少延迟,因为该站点将要求将其中一个用户的输入尽快传输给另一用户,因此从客户端A到服务器再向客户端B发送数据并不是一个好习惯。选项。 我阅读了有关此主题的先前文章,但没有可用的解决方案/示例。据我了解,可以使用Silve

  • 我使用以下命令在同一台计算机上启动了集线器和节点: 我尝试使用以下代码实例化一个浏览器窗口: 页面获取成功,我可以使用browser.page看到页面的超文本标记语言代码_source但是节点上的Chrome窗口没有打开。我根本没有指定无头选项。我使用的是95版Chrome和Chromedrive。 请注意,我是在jupyter笔记本上运行代码的,该笔记本托管在充当selenium服务器和节点的同

  • 问题内容: 我正在尝试在Windows 8 64Bit和SWT 4.3 64Bit下创建SWT.MOZILLA类型的SWT浏览器小部件。 根据此,SWT 4.3应支持XULRunner的10.x的或24.x 64位版本 因此,我从此处下载了10.x和24.x 64版本,并分别在和下解压缩。 如果我启动指向xulrunner10的Java应用程序(使用VM参数),则它可以工作,但是,如果我尝试使用x

  • 在ASP.NET核心中工作,并使用iTextSharp,我正在构建一个PDF并将其保存到本地系统中。我现在想在浏览器中打开该文件,但似乎无法打开,因为我在一次尝试中得到了FileStream错误,而在另一次尝试中则一无所获。 我的逻辑在下面的控制器里。我已经用替换了不必要的代码。重要的代码(我尝试的内容)在区域中。 使用ASP.NET核心将PDF返回到浏览器 在浏览器中的新选项卡中打开PDF 序列

  • 创建新节点 除了通过场景编辑器创建节点外,我们也可以在脚本中动态创建节点。通过 new cc.Node() 并将它加入到场景中,可以实现整个创建过程。 以下是一个简单的例子: cc.Class({ extends: cc.Component, properties: { sprite: { default: null, type: cc.SpriteFra