我想知道如何在Meteor 1.3+中创建/使用多个使用相同npm依赖项的软件包。
我已经迁移到Meteor 1.3+并尝试使用angular
&的npm版本。 angular-meteor
套餐,但我很难完全理解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
我通过在每个包的Npm.depends()
文件中使用package.js
来实现此目的;这会在该包中创建一个.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依赖项的每个包获取以下错误:WARNING: Tried to load angular more than once.
;因为我认为Meteor试图为每个使用它的包包含角度。
从我可以收集的内容来看,这与Meteor知道只包含一次的Meteor软件包不同;这是我在迁移到Meteor 1.3 +之前使用它的方式
我能让它工作的唯一方法就是直接在流星应用程序中包含npm依赖项。
保持一切与上述相同,但从Npm.require()
文件中删除package.js
。然后我meteor npm install --save angular angular-meteor
进行angular
& angular-meteor
个软件包直接添加到流星应用程序&只在整个项目中包含一次。
然后结构变为:
Meteor App
NPM Package angular@1.5.5
NPM Package angular-meteor@1.3.10
Meteor Package A
Meteor Package B
虽然现在这个方法有效,但这个方法的问题有两个:
Npm.depends()
作为我已包含在项目中的npm软件包,我将得到与上述相同的重复错误。< / LI>
答案 0 :(得分:0)
我还没有将此标记为已回答,因为我没有找到问题的解决方案,但我在可能帮助其他人的错误消息方面取得了一些进展。
我的部分问题与我仍在使用Me angular-ui-router
的Meteor包而不是更新我的项目以使用npm版本这一事实有关。生成错误WARNING: Tried to load angular more than once.
是因为angular-ui-router
的Meteor版本依赖于Meteor包angular
;这似乎包含在与npm包不同的方式中,以至于Meteor没有检测到它已经加载了&amp;再加载它。
至于我想在浏览器中使用Npm.require()
npm包的问题...从我可以收集到的内容中,没有办法在Meteor包中进行此操作。在包装中运行npm安装是很常见的。使用package.js
在api.addFiles( ... , 'client' )
文件中包含每个所需文件,但这有明显的缺点,例如不知道哪些Meteor软件包包含来自其npm依赖项的文件 - 所以你最终可能会遇到2个Meteor软件包包括bootstrap(例如),导致Meteor应用程序中包含重复的内容。
由于我认为Meteor将在未来的Meteor版本中弃用Meteor软件包 - 支持纯粹的npm软件包 - 我将离开这一思路并辞职,使用npm install
我需要使用的所有npm包的根级别。由于上述假设无法完成,我可能会因使用Npm.require()
与我通过npm install
添加的npm包而与其他软件包发生冲突。1} p>