项目使用子仓库时依赖包管理的方法
问题简述:有两个仓库,仓库嵌套,父仓库有父仓库的依赖管理(package.json),子仓库同样有自己的仓库依赖管理(package.json)。当父仓库和子仓库需要用的共同依赖时候,如果在各自仓库目录下引入包管理,可能会因为使用的不是一个共同的依赖,造成报错(
例如:"codemirror": "^6.0.1")
解决思路:将子仓库的依赖下载到父仓库的目录下,子仓库使用依赖时会自动向上查找,这样就能解决上述的问题。
解决方法:在父仓库包管理配置(package.json)里,将子仓库当成以来包,引入父仓库中(引到node_modules),这样npm会自动将子仓库下的依赖主动也下载到父仓库的node_modueles,父子仓库公用一个node_modueles。
例子:
子仓库

这是子仓库,在子仓库新建一个文件夹(rely),在该问价夹下创建一个包管理配置文件(package.josn),将子仓库的依赖写在该配置文件中,再在父项目将引入该文件夹(rely)依赖包的形式引入即可,具体如下:
说明:不直接将子仓库依赖写入子仓库的根目录下呢?
因为不需要将子仓库的其他文件也引入父仓库的node_modules包中,在这里我们只是为了将子仓库所需要的依赖包而不是子仓库的内容。并且子仓库根目录下package.json中不能再次写入所需的依赖包,写入后会在子仓库的根目录下会再次下载node_modules包,就会回到最初的问题了,显然这不是我们想要结果。
父仓库(父项目)
在父项目根目录下的package.json里写入"galaxy-common-rely": "file:src/common/rely"即可

题外话:
这样操作完,在引入包的情况下,可能eslint会报错

这是因为在当前项目根目录下package.json里没找见该依赖包的注册信息,实际上项目是可以运行的,因为确实能找到该依赖。

提示是eslint的报错,那就需要配置eslint,在.eslintrc.js中的
rules中配置
rules: {
'import/no-extraneous-dependencies': [ 'error', { packageDir: ['./src/common/rely', './'] }, ]
}
让eslint去找对应的包管理配置文件即可

使用别名引入:
适用于一个项目同时引入一个依赖包的两个版本
npm install codemirror-v6@npm:codemirror@6.0.1 -S
...
"codemirror": "^5.45.0",
"codemirror-v6": "npm:codemirror@^6.0.1",
...

浙公网安备 33010602011771号