[英]Using multiple packages in Meteor 1.3+ that include the same npm package
我想知道如何創建/使用Meteor 1.3+中使用相同npm依賴項的多個包。
我已經遷移到流星1.3+,並且嘗試使用angular
和angular-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依賴項的每個包獲取以下錯誤: WARNING: Tried to load angular more than once.
; 因為我想象Meteor試圖為每個使用它的包裝包含角度。
從我可以收集的內容來看,這與Meteor知道只包含一次的Meteor軟件包不同; 這是我在遷移到Meteor 1.3+之前使用它的方式
如果我直接在流星應用程序中包含npm依賴項,我似乎唯一可以使它工作的方法。
保持一切與上面相同,但從package.js
文件中刪除Npm.require()
。 然后我做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軟件包,我將得到與上面相同的重復錯誤。 我還沒有將此標記為已回答,因為我沒有找到解決問題的方法,但我在可能幫助其他人的錯誤消息方面取得了一些進展。
我的部分問題與我仍在使用angular-ui-router
的Meteor包而不是更新我的項目以使用npm版本這一事實有關。 錯誤WARNING: Tried to load angular more than once.
生成是因為angular-ui-router
的Meteor版本依賴於Meteor包angular
; 它似乎以與npm包不同的方式包含在內,以至於Meteor沒有檢測到它已經加載並再次加載它。
至於我想在瀏覽器中使用Npm.require()
獲取npm包的問題......從我可以收集到的內容中,沒有辦法在Meteor包中進行此操作。 在包中運行npm install並使用api.addFiles( ... , 'client' )
在package.js
文件中包含每個所需文件,但這有明顯的缺點,例如不知道哪個Meteor包包含哪些文件從他們的npm依賴項 - 所以你可能最終得到2個Meteor包,每個包都試圖包含bootstrap(例如),導致Meteor應用程序中的重復包含。
由於我認為Meteor將在Meteor的未來版本中棄用Meteor軟件包 - 支持純npm軟件包 - 我將離開這一思路並辭職,在根級別使用npm install
來處理所有npm軟件包我需要使用。 由於上述假設無法完成,因此我將不會使用Npm.require()
與我通過npm install
添加的npm包發生沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.