项目中想用到某个包,比如js-base64。
安装目录node_modules中已经有了,但是package.json中还没。
这种情况需要再安装包吗?安装的话,会引发打包体积增大吗?
如果项目package.json 依赖A库、B库。 A库依赖js-base64: ^2.0.0,
B库依赖js-base64: ^3.0.0。 最终会安装新版本^3.0.0吗?这样会不会引发A库不兼容问题。
项目中想用到某个包,比如js-base64。
安装目录node_modules中已经有了,但是package.json中还没。
这种情况需要再安装包吗?安装的话,会引发打包体积增大吗?
如果项目package.json 依赖A库、B库。 A库依赖js-base64: ^2.0.0,
B库依赖js-base64: ^3.0.0。 最终会安装新版本^3.0.0吗?这样会不会引发A库不兼容问题。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
要的
因为你并不能确定这个包是哪个的依赖包就算确定了也不能保证这个包未来是否没有变化
假如你
package.json
里依赖个A包,A包依赖了js-base64
,但是有一天A包升级了或者不要A包了,这时候js-base64
库也就没了,你的项目如果没有测试到这一块就要报错了。如果跟已有包是相同版本就不会,如果是不同版本就相当于不同的库
当查找一个包的时候会先找当前目录下node_modules下,npm下载包的时候也是如果有不同版本的同名包,就下载到当前库的
node_modules
下查找到的目录都不一样,就是完全不一样的文件,webpack又没有diff重复度
你在
index.js
里引入lib1.js
和lib2.js
,lib1
和lib2.js
内容一模一样,webpack
并不会把哪个删除掉至于包版本冲突这是npm管理的事情
下面是npm安装包的策略
假如你项目用
js-base64
1.0.0项目下A包用
js-base64
1.2.0项目下B包用
js-base64
2.2.0项目A包里的aa包用了
js-base64
1.3.0aa中会先在自己的
node_modules
里查,查不到往上查A的node_modules
,查不到继续往上级目录下的node_modules
找aa包并不在A下的
node_modules
而是在往一级跟A同级,是因为没有跟aa版本冲突的,当aa的版本也冲突了就会被放到A下面的node_modules
里但是另一种情况
假如你项目、A包、B包、aa包都用的同一个版本就会自动提到顶层的
node_modules
找包的逻辑依然是先从自己下面的
node_modules
,找不到继续往上层目录找,最终都走到顶层的node_mdoules
下例如A下面的
node_modules
找aa,找不到,往上一级也就是跟A同级找,找到了