參考: https://www.cnblogs.com/wonyun/p/9349691.html
npm 安裝同一個包的多個版本【 用npm alias來實現】:https://blog.csdn.net/wozhenhaokan/article/details/105504721 或 https://www.cnblogs.com/amiezhang/p/13166240.html
說明:如果一個包從頭用到尾,我們一般不會再去引入這個包的另外版本。但是有的項目會碰到 必須 要另外弄個版本的包,或者復制這個版本的包的情況。
比如1: npm里面的一個包A,項目都快開發好了,突然新需求加入進來。需要用到 包 A新版的功能【新版 和 舊版存在兼容性問題】。這時就需要兩個版本的包 A 同時存在 node_modules 里。【這種情況出現的情況比較少】
比如2:npm的 包 B 里面引入了包 A【B 對 A 進行了封裝,項目中用 包 B】。快開發好,突然有個功能用 包 B 實現不了【包B 封裝的 功能不上很徹底】,只能用 A。這時項目中 的 包 B 引用了 A,項目文件中 也引用 A。
導致 打包后運行報錯【開發模式沒有問題,具體原因不清楚。可能是打包編譯時,包 B 對A的 引用 已經 編譯了;所以項目中對 A 的引用,就不在編譯。而兩種 編譯 的 使用模式 不一致導致的】。
實踐經歷: 在開發 "市民卡會務客戶端" electron 桌面軟件 時,引用 tim-js-sdk 包就碰到這個問題。
視頻會議 功能 使用 trtc-electron-education 包【對 tim-js-sdk、trtc-electron-sdk 兩個包進行了封裝。但是這個包沒有把 直播功能封裝進去】 實現;直播 功能使用 tim-js-sdk、trtc-electron-sdk 實現。
結果 因為 trtc-electron-education 引用了 tim-js-sdk,外面項目也引用了 tim-js-sdk。開發時沒有問題,打包后運行就報錯【但是 trtc-electron-sdk 這個包確沒有報錯,具體里面的 原因應該和 包的設計有關吧】。
最后 利用 npm alias 實現了,同一個包,以兩種 npm 包名共存 在一個 node_modules 中。解決了這個問題。