痛点
同一个前端工程,不同分支的依赖包不同,例如:
develop_A分支有A依赖,develop_B分支有B依赖,当分支切换后,编译就会报错,因为node_modules下没有同时存在依赖包A和B。
如果两个依赖间没有它们依赖包的版本冲突,这个问题就比较好解决,两个依赖都装上就行了,反正node_modules都只存在于本地。
但如果存在版本冲突呢,如何解决?
解决方案
lock
如果分支间切换并不频繁,就可以使用这种方式,在.gitignore中加入:
node_modules/
这个在一般情况下都会存在。并且不同分支下package-lock.json会锁定依赖版本,在切换分支后手动npm i安装下。
不同安装目录
但如果分支经常会切换,那每次启动前都要拉依赖就很难受了。这时候我们可以把不同分支的依赖进行隔离。
npm install --prefix 是一个用于在指定目录下安装 Node.js包的npm命令的选项。它的用法如下:
npm install <package-name> --prefix <directory>
其中<package-name> 是要安装的Node.js包的名称,<directory> 是指定的安装目录。使用--prefix选项可以将包安装到指定目录而不是默认的 node_modules目录。
回到开头的问题,如果默认A分支使用node_modules文件夹,切换到B分支,执行:
npm install packageB --prefix node_modules_B
生成的结构大体如下:
<directory-path>/
├── node_modules/
│ ├── <package-name>/
│ │ ├── ... # 包的文件和文件夹
│ │ └── ...
│ ├── <dependency-1>/
│ │ ├── ... # 依赖包1的文件和文件夹
│ │ └── ...
│ └── <dependency-2>/
│ ├── ... # 依赖包2的文件和文件夹
│ └── ...
├── ... # 其他项目文件和文件夹
└── ...
如果是直接执行而不指定具体包:
npm install --prefix node_modules_B
那node_modules_B目录下可能会嵌套很深。
如果要卸载某个包,同样是npm uninstall来完成。
注意:
--prefix 选项只对当前安装命令有效,不会影响之后的 npm 命令。如果您想在之后的命令中继续使用指定的安装目录,需要再次使用 --prefix 选项。