最近在一个项目中,遇到一个奇怪的问题。
3YKT4@T)%H0%14C_0ARBMBY.png全局搜索了一下,项目中没有调用 xxx.load 这个函数。根据报错的执行堆栈信息最后追踪到是项目中的一个依赖包内部的问题。奇怪的是,项目之前是跑得起来的呀?怎么突然就不行了呢?
经过一番查找,最终发现原来是项目中的package.lock.json
被加入了.gitignore
文件中,这个文件被忽略上传到git了。所以我clone
下来代码后最终安装的依赖版本会与之前正常运行的代码所安装的版本不一致所导致的。那么什么是package.lock.json
这个文件是干嘛的呢?
早期的npm
包管理工具(5.0
之前),在package.json
中没指定具体版本的时候只对项目依赖的大版本进行控制,每次安装的时候后会安装这个大版本下最新的小版本。所以经常会出现一个项目之前跑得好好的,过了一段时间某个依赖包的作者修改了包的一些功能,结果我们重新安装依赖后结果跑不起来了。
后来,npm
参考yarn
包管理工具添加了依赖版本锁的功能。npm
在install
的时候,会自动创建package.lock.json
,然后在里面记录下当前所安装的依赖版本。下次安装的时候会自动检索项目下的该文件,通过该文件的指定的版本进行安装,这样就避免了同一个项目安装版本不一致导致的问题。
但是,某些项目的脚手架或者作者出于一些原因,会把package.lock.json
添加到.gitignore
中。这个时候在项目开发了一段时间后可能就又会出现依赖不一致的问题。这个时候如果有之前正常运行的项目代码还好,我们只需要把项目中的package.lock.json
替换成之前正常运行的代码中的改文件了,要是没有那就只能慢慢排查问题了。
网友评论