最近項目組寫了幾個模塊,打算采用依賴的方式來使用它們。
因為敏感性問題,不打算發布到npm官方倉庫;自行搭建一個npm倉庫成本也大。
所以最后決定采用本地安裝。
即在package.json中填寫如下:
"dependencies": {
"module_a": "../module_a"
},
但是npm安裝本地依賴,會有個bug。
比如現在有項目 myproject module_a module_b
myproject 依賴 module_a module_b
module_a 依賴 lodash(或者其他第三方依賴)
module_b 依賴 module_a lodash(或者其他第三方依賴)
那么在myproject執行npm i 的時候,會出現以下錯誤信息,無法安裝成功
npm ERR! code ENOENT
npm ERR! syscall rename
npm ERR! path /home/guohaoyun/workspace/test_local_dependence/myproject/node_modules/.staging/lodash-09e8142d
npm ERR! dest /home/guohaoyun/workspace/test_local_dependence/module_a/node_modules/lodash
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, rename '/home/guohaoyun/workspace/test_local_dependence/myproject/node_modules/.staging/lodash-09e8142d' -> '/home/guohaoyun/workspace/test_local_dependence/module_a/node_modules/lodash'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /home/guohaoyun/.npm/_logs/2021-05-19T14_30_34_266Z-debug.log
這里有兩種解決方案:
-
本地依賴一個個安裝
即在 myproject 一個個執行下面的指令
npm i ../module_a
npm i ../module_b
-
將 module_a module_b 打包
執行cd module_a && npm pack
和cd module_b && npm pack
生成
module_a-1.0.0.tgz 和 module_b-1.0.0.tgz
然后更改 myproject的package.json"dependencies": { "module_a": "../module_a-1.0.0.tgz", "module_b": "../module_b-1.0.0.tgz" }
最后和平時一樣,執行
npm i
即可