gpt4 book ai didi

meteor - 在 Meteor 1.3+ 中使用包含相同 npm 包的多个包

转载 作者:行者123 更新时间:2023-12-02 04:41:47 28 4
gpt4 key购买 nike

我想知道如何在 Meteor 1.3+ 中创建/使用多个使用相同 npm 依赖项的包。

我已经迁移到 Meteor 1.3+ 并尝试使用 angularangular-meteor 包的 npm 版本,但我正在努力完全理解如何npm 在包中使用并且似乎无法根据需要让它工作。

我有一个现有的 Meteor 应用程序,我将功能拆分到 Meteor 包中以促进模块化和可重用性 - 而不是直接在 Meteor 根中。

我尝试了几种不同的方法来构建它,但都无济于事。

我理想中喜欢的结构

这是我的首选方式,因为我不需要担心我的 Meteor 包依赖什么 npm 包。

如果我按如下方式构建我的应用程序:

Meteor App
Meteor Package A
NPM Package angular@1.5.5
NPM Package angular-meteor@1.3.10
Meteor Package B
NPM Package angular@1.5.5
NPM Package angular-meteor@1.3.10

我通过在每个包的 package.js 文件中使用 Npm.depends() 来实现这一点;在该包中创建一个 .npm 文件夹:

Npm.depends({
'angular': '1.5.5',
'angular-meteor': '1.3.10'
});

在 js 文件中,我在任何使用 angular 和/或 angular-meteor 的文件顶部都有以下内容。

// Included only when angular is needed
import angular from 'angular';
// Included only when angular-meteor is needed
import angularMeteor from 'angular-meteor';

此方法的问题是,对于每个具有重复 npm 依赖项的包,我都会在浏览器控制台中收到一次以下错误:警告:尝试多次加载角度。;因为我想 Meteor 正试图为每个使用它的包包含 angular。

据我所知,这与 Meteor 知道只包含一次的 Meteor 包不同;这就是我在迁移到 Meteor 1.3+ 之前使用它的方式

备选

我似乎可以让它工作的唯一方法是直接在 meteor 应用程序中包含 npm 依赖项。

保持一切与上面相同,但从 package.js 文件中删除 Npm.require()。然后我执行 meteor npm install --save angular angular-meteor 以便将 angularangular-meteor 包直接添加到 meteor 应用程序中& 在整个项目中只包含一次。

然后结构变成:

Meteor App
NPM Package angular@1.5.5
NPM Package angular-meteor@1.3.10
Meteor Package A
Meteor Package B

虽然现在这个方法可行,但这个方法的问题是双重的:

  • 如果我需要使用第 3 方包(我无法控制),它使用 Npm.depends() 作为我已经包含在我的项目中的 npm 包,我将获得与上述相同的重复错误。
  • 然后我还需要在应用程序级别管理包的 npm 依赖项,这并不理想,因为我需要记住删除依赖项,当且仅当它们不再被任何剩余的包需要时。

最佳答案

我还没有将此标记为已回答,因为我还没有找到解决我的问题的方法,但我在可能对其他人有帮助的错误消息方面取得了一些进展。

我的部分问题与我仍在为 angular-ui-router 使用 Meteor 包而不是更新我的项目以使用 npm 版本这一事实有关。生成错误 WARNING: Tried to load angular more than once. 是因为 angular-ui-router 的 Meteor 版本依赖于 Meteor 包 angular;它似乎以不同的方式包含在 npm 包中,因此 Meteor 不会检测到它已经加载并再次加载它。

至于我想在浏览器中对 npm 包使用 Npm.require() 的问题……据我所知,在 Meteor 包中无法做到这一点。在包中运行 npm install 并使用 api.addFiles( ... , 'client' )package.js 文件中包含每个需要的文件是有技巧的,但是这有明显的缺点,例如不知道哪些 Meteor 包包含来自其 npm 依赖项的哪些文件 - 因此您最终可能会得到 2 个 Meteor 包,每个包都试图包含 bootstrap(例如),导致 Meteor 应用程序中重复包含。

由于我认为 Meteor 将在 Meteor 的某些 future 版本中弃用 Meteor 包 - 支持纯 npm 包 - 我将离开这个思路并辞职使用 npm install 在我需要使用的所有 npm 包的根级别。有了上面无法完成的假设,有理由认为我不会与使用 Npm.require() 的其他包发生冲突,因为我通过 添加了一个 npm 包npm 安装

关于meteor - 在 Meteor 1.3+ 中使用包含相同 npm 包的多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com