簡體   English   中英

在Meteor 1.3+中使用包含相同npm包的多個包

[英]Using multiple packages in Meteor 1.3+ that include the same npm package

我想知道如何創建/使用Meteor 1.3+中使用相同npm依賴項的多個包。

我已經遷移到流星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依賴項的每個包獲取以下錯誤: 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以便angularangular-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軟件包,我將得到與上面相同的重復錯誤。
  • 然后我還需要在應用程序級別管理軟件包的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM