当前位置: 首页 > 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
  • [译]Python中的类属性与实例属性的区别
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 345-反转字符串中的元音字母
  • AngularJS指令开发(1)——参数详解
  • Codepen 每日精选(2018-3-25)
  • Effective Java 笔记(一)
  • express.js的介绍及使用
  • IDEA常用插件整理
  • JavaScript标准库系列——Math对象和Date对象(二)
  • k8s 面向应用开发者的基础命令
  • LeetCode29.两数相除 JavaScript
  • SOFAMosn配置模型
  • 对象管理器(defineProperty)学习笔记
  • 给新手的新浪微博 SDK 集成教程【一】
  • 规范化安全开发 KOA 手脚架
  • 机器学习学习笔记一
  • 基于组件的设计工作流与界面抽象
  • 提醒我喝水chrome插件开发指南
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • ​马来语翻译中文去哪比较好?
  • ​业务双活的数据切换思路设计(下)
  • # include “ “ 和 # include < >两者的区别
  • #、%和$符号在OGNL表达式中经常出现
  • #laravel 通过手动安装依赖PHPExcel#
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (9)STL算法之逆转旋转
  • (C语言)字符分类函数
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (ibm)Java 语言的 XPath API
  • (TOJ2804)Even? Odd?
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (力扣)循环队列的实现与详解(C语言)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转)winform之ListView
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET BackgroundWorker
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 简单实现MD5
  • .NET大文件上传知识整理