前端项目依赖版本管理问题

最近在一个项目中,遇到一个奇怪的问题。

console

全局搜索了一下,项目中没有调用 xxx.load 这个函数。根据报错的执行堆栈信息最后追踪到是项目中的一个依赖包内部的问题。奇怪的是,项目之前是跑得起来的呀?怎么突然就不行了呢?

经过一番查找,最终发现原来是项目中的package.lock.json被加入了.gitignore文件中,这个文件被忽略上传到git了。所以我clone下来代码后最终安装的依赖版本会与之前正常运行的代码所安装的版本不一致所导致的。那么什么是package.lock.json这个文件是干嘛的呢?

早期的npm包管理工具(5.0之前),在package.json中没指定具体版本的时候只对项目依赖的大版本进行控制,每次安装的时候后会安装这个大版本下最新的小版本。所以经常会出现一个项目之前跑得好好的,过了一段时间某个依赖包的作者修改了包的一些功能,结果我们重新安装依赖后结果跑不起来了。

后来,npm参考yarn包管理工具添加了依赖版本锁的功能。npminstall的时候,会自动创建package.lock.json,然后在里面记录下当前所安装的依赖版本。下次安装的时候会自动检索项目下的该文件,通过该文件的指定的版本进行安装,这样就避免了同一个项目安装版本不一致导致的问题。

但是,某些项目的脚手架或者作者出于一些原因,会把package.lock.json添加到.gitignore中。这个时候在项目开发了一段时间后可能就又会出现依赖不一致的问题。这个时候如果有之前正常运行的项目代码还好,我们只需要把项目中的package.lock.json替换成之前正常运行的代码中的改文件了,要是没有那就只能慢慢排查问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:https://tech.meituan.com/npm-shrinkwrap.html 在一次项目开发...
    RiverSouthMan阅读 5,049评论 0 0
  • 本文参考:2018 年了,你还是只会 npm install 吗?npm 官方文档package.json文件 -...
    双面小Q阅读 10,268评论 1 9
  • NPM NPM 是随同 Node 一起安装的包管理工具,能解决 Node 代码部署上的很多问题,常见的使用场景有以...
    heyi_let阅读 7,414评论 0 2
  • 我的一位高中同学,不久前发微信给我说,自已很想念高中同窗学友,提出要与我一起回忆同学姓名。他还讲了六位同学姓名和住...
    老乐铭阅读 3,150评论 0 1
  • 墙上的痕迹能主动下来 进入有序大脑 曾经的冷雨水 抽去了本质 像轻飘飘的白纸 光线观察墙的表情 没有出现低落 放...
    团结巷徐阅读 2,778评论 0 4