guohaoyun

Node.js使用本地依赖

最近项目组写了几个模块,打算采用依赖的方式来使用它们。

因为敏感性问题,不打算发布到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

这里有两种解决方案:

  1. 本地依赖一个个安装
    即在 myproject 一个个执行下面的指令
    npm i ../module_a
    npm i ../module_b

  2. 将 module_a module_b 打包
    执行 cd module_a && npm packcd 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 即可

posted on 2021-05-25 23:16  邮差101  阅读(2237)  评论(0编辑  收藏  举报

导航