记一次npm配置引发的local bug排查事件
起因:
- 同事离职,项目交接,我成接盘侠
事故:
- 拉了代码,没有任何改动,运行后有一个组件的样式有问题,看了线上环境没问题,拉同事看了他的本地也没问题
排查过程:
- 安装依赖时有一个奇怪现象,项目是有
package.lock
的,按理说直接安装依赖一般除了registry
配置问题导致找不到包,不会有其他问题,但是大家都是公司内容配置过的,不应该有问题。然后npm i
之后确实没报错,然后就npm run serve
,然后就出问题了- 报错
Error: Cannot find module @rollup/rollup-win32-x64-msvc. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.
- 找不到
@rollup/rollup-win32-x64-msvc
,行,看一眼package-lock.json
,"version": "4.9.6"
,行,npm i @rollup@4.9.6
,OK,安装成功,run!成功! - 打开网页,弹窗组件样式不对!
- 然后用
npm list
排查各个主要依赖的版本,后package-lock
对得上啊 - 代码肯定没问题,肯定是我本地的环境配置有问题,方向别错,往环境配置看看出啥问题了吧。
- 然后尝试了重装依赖,更换node版本,更换yarn,都无济于事
- 但是更换yarn的时候,又发生了一件奇怪的事,因为yarn在安装依赖的时候会有提示报错哪个包找不到,让你安装其他版本,没错,就是报错
@rollup/rollup-win32-ia32-msvc
找不到:-
Couldn't find any versions for "@rollup/rollup-win32-ia32-msvc" that matches "4.46.2"
- 然后yarn会给你其他版本选择安装
- OK,那我安装其他版本嘛。OK,run!
- 还是样式不对
-
- 等等,刚刚yarn报错什么?4.46.2?
package-lock
里不是4.9.6吗?为什么安装没走package-lock
? - 冲浪一下,AI问一下,得到的答案似乎都不太对得上
- 看一眼npm的配置呢,找到.npmrc文件,看看里面有啥
- 嗯,registry配置,没问题。嗯,strict-ssl,没问题。嗯,no_proxy,没问题。嗯,package-lock=false,没问题。
- 嗯?刚刚好像混入了什么奇怪的东西,package-lock=false???
- 哪个SB加的配置(大概率是某个走神的夜晚博主自己加的)。删掉,删掉node_modules,重装
- oh!holy shi.!没@rollup/rollup-win32-ia32-msvc的错了
- 再去看看页面,也没问题了
总结:
- 当你发现安装依赖的版本和
package-lock.json
或yarn.lock
不一致时,找到你的.npmrc文件,看看里面是否有一句package-lock=false
,有的话,删掉完事儿