node 第十二天 npm补充 详解package-lock.json在团队协作中的作用

1.npm 是Node的开放式模块登记和管理系统,是Node.js包的标准发布平台,用于Node.js包的发布、传播、依赖控制

2.今天主要说的是package-lock.json在团队协作中的作用(yarn.lock也是一样), 其实在npm@5之后和yarn的区别已经很小了

正常项目用哪个都行, 几乎可以在每个阶段无缝切换

3. package-lock.json 是否应该提交到版本库, 无论是yarn官方还是npm官方都认为应该提交到版本库, 用来保证团队每个开发者的依赖一致性,那么package-lock.json是如何保证团队依赖一致性的, 下面会说明

4. 三个常见的npm语义化版本

js 复制代码
  2.1.0   必须是2.1.0
 ^2.1.0   限定大版本,后面更新不能超过主版本2
 ~2.1.0   限定前两个版本,后面更新不能超过主版本2和次版本1

5.我初始化项目中package.json依赖信息如下

json 复制代码
  "devDependencies": {
    "sass": "^1.68.4"
  },

执行npm install

在我的仓库下生成了node_modulespackage-lock.json

对于项目初始化我需要用到sass, 我的本意是安装主版本号为1的sass依赖, 后两个版本尽可能新的给我安装, 此时npm源上的sass包最新的版本就是1.68.4, 那么我安转的sass肯定是1.68.4, 生成package-lock.json信息如下

json 复制代码
"sass": {
      "version": "1.68.4",
      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.68.4.tgz",
      "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==",
      "requires": {
        "chokidar": ">=3.0.0 <4.0.0",
        "immutable": "^4.0.0",
        "source-map-js": ">=0.6.2 <2.0.0"
      }
    }

6.锁定后续团队成员安装的依赖版本

之后只要我把package-lock.json提交到版本库, 下一位团队成员拉取代码后, 执行npm install那么他安装的sass依赖版本就是已经被我锁定的1.68.4

哪怕他拉取的时候sass的作者已经把1.69.4发布到npm, 他下载的依赖依然和我初始化项目下载的依赖一样, 因为我锁定了依赖版本, 这有利于团队成员开发依赖一致性

反之, 如果我没有把package-lock.json提交到版本库, 那么后续拉取代码安装依赖的团队成员就会根据package.json的版本规则去尽可能新的安装依赖, 这可能导致一些意想不到的问题, 因为大家的依赖版本不一致了

7.有了package-lock.json文件, 我们应该如何更新依赖

根据上面说的难道以后我们都不能更新依赖, 使用包的新特性了吗? 当然不是, 不过更新依赖应该规范起来

这里提供一个流程

1.某位团队成员 使用 npm update 更新依赖(或者直接修改package.json里面的依赖版本), 如果npm源有新的符合语义化版本的依赖可用, 那么这位成员的package-lock.json肯定会变化,

++

tip: 如果使用npm update命令更新依赖, 最后找到更新后的依赖的版本, 你可以手动修改到package.json, 因为package.json只能手动操作, 这样做的目的是方便及时方便的查看依赖版本, 比如1.68.4更新到了1.69.4 你应该把package.json里面的^1.68.4手动改为^1.69.4

(这一步看个人喜好, 不是那么重要~还可能会手动出错~~~~)

++

2.这位成员把package-lock.jsonpackage.json提交到仓库

++

3.通知其它成员, 拉取package-lock.jsonpackage.json进行npm install更新各自的依赖, 保持团队依赖一致性.

8.本地隐藏锁文件 官方叫法: Hidden Lockfiles

原话翻译

为了避免node_modules重复处理文件夹,从npm v7 开始,npm 使用node_modules/.package-lock.json. node_modules它包含有关树的信息,并且在满足以下条件的情况下用于代替读取整个层次结构:

这个node_modules/.package-lock.json文件和版本的锁定关系测试如下

有一种情况:

你把本地的package-lock.json删掉, 但是保存着node_modules, 那么你在npm install的时候node_modules/.package-lock.json会起到和package-lock.json一样的作用

这种情况直接不用去注意, 因为没人会把node_modules提到代码仓库而不把package-lock.json提上去, 这TM~
fun:-)

相关推荐
daqinzl3 分钟前
node.js @ffmpeg-installer/ffmpeg 桌面推流
ffmpeg·node.js·installe·桌面推流
蒜蓉大猩猩15 分钟前
Vue.js - 组件化编程
开发语言·前端·javascript·vue.js·前端框架·ecmascript
Clockwiseee34 分钟前
JS原型、原型链以及原型链污染学习
javascript·学习·原型模式
王解1 小时前
一篇文章读懂 Prettier CLI 命令:从基础到进阶 (3)
前端·perttier
乐闻x1 小时前
最佳实践:如何在 Vue.js 项目中使用 Jest 进行单元测试
前端·vue.js·单元测试
遇到困难睡大觉哈哈1 小时前
JavaScript面向对象
开发语言·javascript·ecmascript
檀越剑指大厂1 小时前
【Python系列】异步 Web 服务器
服务器·前端·python
我是Superman丶1 小时前
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法
开发语言·前端·javascript
Hello Dam1 小时前
基于 Spring Boot 实现图片的服务器本地存储及前端回显
服务器·前端·spring boot
小仓桑1 小时前
利用 Vue 组合式 API 与 requestAnimationFrame 优化大量元素渲染
前端·javascript·vue.js