当前位置: 首页 > news >正文

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语义化版本

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

5.我初始化项目中package.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信息如下

"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:-)

相关文章:

  • 【0基础学Java第三课】-- 运算符
  • 编程应用场景:便利店商超进销存管理系统软件,试用版可以免费试用下载
  • UML中类之间的六种主要关系
  • PostGreSQL:数据表继承
  • JavaScript_Pig Game切换当前玩家
  • 【tio-websocket】13、消息编码、解码、处理—AioHandler
  • 现代挖掘机vr在线互动展示厅是实现业务增长的加速度
  • Lauterbach使用指南之RunTime功能
  • 服务器之日常整活
  • golang连接池检查连接失败时如何重试
  • SpringAOP源码解析之advice执行顺序(三)
  • Spring Boot 配置邮件发送服务
  • 【实用网站分享】
  • 刷题笔记day01-数组
  • Lvs+Nginx+NDS
  • 分享的文章《人生如棋》
  • 【5+】跨webview多页面 触发事件(二)
  • 【笔记】你不知道的JS读书笔记——Promise
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • fetch 从初识到应用
  • HashMap ConcurrentHashMap
  • Laravel Telescope:优雅的应用调试工具
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • select2 取值 遍历 设置默认值
  • spring + angular 实现导出excel
  • springboot_database项目介绍
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • WePY 在小程序性能调优上做出的探究
  • 来,膜拜下android roadmap,强大的执行力
  • 前端工程化(Gulp、Webpack)-webpack
  • 数组大概知多少
  • raise 与 raise ... from 的区别
  • #QT(串口助手-界面)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (四) 虚拟摄像头vivi体验
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Scala的“=”符号简介
  • (转)可以带来幸福的一本书
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net 提取注释生成API文档 帮助文档
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • :中兴通讯为何成功
  • ??eclipse的安装配置问题!??
  • @RequestMapping-占位符映射
  • [ IO.File ] FileSystemWatcher
  • [100天算法】-目标和(day 79)
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C语言]一维数组二维数组的大小
  • [JAVA设计模式]第二部分:创建模式
  • [Linux系统编程] 静态库与动态库