2017-04-12 104 views
1

我們正在提升一個巨大的代碼庫的部分過程。我們正在引入一個使用webpack構建的模塊。爲了避免代碼重複,我們使用了webpack的外部選項。混合browserify和webpack外部

當我們開始將我們的模塊集成到當前正在使用browserify的主代碼庫中時,我們遇到了一個問題,即共享依賴包含兩次並導致問題。

有沒有辦法讓webpack使用打包版本的依賴關係?那麼在最終的browserified bundle中,我們只需要包含一個依賴項?

在我看來,這可能是不可能的,如果是這樣的話,我會推動我們的代碼庫的其餘部分移到webpack上(它已經在進行中)。

我到目前爲止唯一的解決方案是讓webpack模塊也導出共享依賴項,然後讓主應用程序使用該導出,但這並不理想。

我已確保兩個node_modules文件夾中的依賴項都在相同的版本,並且我仍然得到2個實例。

我需要能夠告訴Browserify只解析我的應用程序node_modules,或告訴它從上到下解析,即首先查看頂層node_modules,這可能嗎?

我曾嘗試設置NODE_PATH選項,當使用CLI到沒有影響。

**更新**

所以,問題是,當Browserify命中require()語句中的WebPack捆綁它從本地文件夾node_modules解決,所以我們最終依賴的兩個實例。我可以通過在應用程序require()或webpacks external選項中使用相對路徑並確保它們使用相同的文件來解決此問題。

回答

0

所以這似乎是問題是由於我已經符合鏈接(與npm鏈接),模塊,因爲我也在這個工作。看起來,當Browserify解析symlinked模塊中的require時,它解析爲它自己的node_modules,並且我們最終得到2個副本。

當我通常安裝模塊時,它一切正常,所以這是好的,因爲模塊的其他使用者應該沒有問題。令人討厭的是,它的行爲如此,但我只需要確保在模塊旁邊開發時,我在主應用程序中指向相同的依賴關係。

所以我需要在主應用程序說明(而符號鏈接)看起來是這樣的:

require('./node_modules/my-module/node_modules/shared-dependency/index.js'); 

我需要正常不符號鏈接時。