转自:https://www.cnblogs.com/cangqinglang/p/8336754.html

仅用于学习!!!

其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。

引用知乎@周载南的回答

根据官方文档,这个package-lock.json 是在 `npm install`时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。

它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。你可以选择以如下方式来标明自己所需要库包的版本

这里举个例子:

"dependencies": {
 "@types/node": "^8.0.33",
},

这里面的 向上标号^是定义了向后(新)兼容依赖,指如果 types/node的版本是超过8.0.33,并在大版本号(8)上相同,就允许下载最新版本的 types/node库包,例如实际上可能运行npm install时候下载的具体版本是8.0.35。波浪号

大多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这一原则:相同大版本号的同一个库包,其接口符合兼容要求。这时候用户就很头疼了:在完全相同的一个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包行为特征也不同有时候甚至完全不兼容。

因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。

原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。

那如果我们安装时的包有bug,后面需要更新怎么办?

在以前可能就是直接改package.json里面的版本,然后再npm install了,但是5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了,所以我们只能npm install xxx@x.x.x  这样去更新我们的依赖,然后package-lock.json也能随之更新。

假如我已经安装了jquery 2.1.4这个版本,从git更新了package.json和package-lock.json,我npm install能覆盖掉node_modules里面的依赖吗?

其实我也有这个疑问,所以做了测试,在直接更新package.json和package-loc.json这两个文件后,npm install是可以直接覆盖掉原先的版本的,所以在协作开发时,这两个文件如果有更新,你的开发环境应该npm install一下才对。

webpack中package-lock.json的作用相关推荐

  1. webpack:package.json中scripts的作用

    webpack:package.json中scripts的作用 为了在执行命令的时候输入太长的命令,我们可以将要执行的命令配置到 package.json的scripts中,因为scripts中配置可 ...

  2. npm中package-lock.json的作用:npm install安装时使用

    简单理解: XYZ 的格式 对应为: 主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的 ...

  3. NET面试题:C#中的lock关键字有何作用

    NET面试题:C#中的lock关键字有何作用 2011-03-01 08:42:04 标签:.net面试题 .net电子书 .net教学视频 .net 更多.net面试题,.net电子书,.net教学 ...

  4. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  5. VScode 插件中 package.json 文件字段详解

    一.package.json文件内容 {// 插件的名字,应全部小写,不能有空格: string"name": "my-vscode-plugin",// 版本 ...

  6. Ajax如何设置contenttype,ajax中设置contentType: application/json的作用

    最近在做项目交互的时候,刚开始向后台传递数据返回 415 ,后来百度添加了 contentType:"application/json" 之后返回400,然后把传输的数据格式改为j ...

  7. ajax_contenttype,ajax中设置contentType: application/json的作用

    AJAX 的 ajax中设置contentType: "application/json"的作用 最近在做项目交互的时候,刚开始向后台传递数据返回 415 ,后来百度添加了 con ...

  8. js ajax contenttype,ajax中设置contentType: application/json的作用(图文教程)

    这篇文章主要介绍了ajax中设置contentType: "application/json"的作用,需要的朋友可以参考下 最近在做项目交互的时候,刚开始向后台传递数据返回 415 ...

  9. webpack中常见loader的作用和使用方法

    webpack中常见的loader有哪些?它们的作用是什么呢? 之前我们有说到,webpack默认情况下只认识.js结尾的文件,要打包其它类型的文件,则我们需要在webpack.config.js文件 ...

  10. webpack --- [读书笔记] webpack中常用的一些配置项

    1. Webpack 当前Web开发面临的困境 文件依赖关系错综复杂 静态资源请求效率低 模块化支持不友好 浏览器对高级JavaScript特性兼容程度低 1.1 webpack概述 webpack是 ...

最新文章

  1. 教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)
  2. 同盟与对抗:谈《少女杜拉的故事》中的治疗关系(转)
  3. Python3.10 结构化模式匹配 PEP 634
  4. 思科 GNS3 配置 NAT 端口映射
  5. [Android] Android开机启动Activity或者Service方法
  6. 如何使用JdbcTemplate实现数据的增删改查?
  7. 老主板BIOS不识别nvem固态硬盘,修改BIOS添加nvme驱动
  8. freeswitch安装
  9. U盘重装win10系统专业版——启动盘制作
  10. 转载-公历转换农历VB示例
  11. Domain Adaptation论文合集
  12. python自然语言处理之spacy详解
  13. ESP32解析ble蓝牙手柄信号,直接通讯,用于控制机器人小车机械臂等
  14. 梯度消失与梯度爆炸(多图)
  15. CPU降温软件测试自学,CPU降温软件真的有用吗工作原理是什么
  16. fragment重叠问题
  17. 福州大学计算机学院奖学金,2018年福州大学硕士研究生奖学金和助学金政策
  18. java通过http代理获取FTP的文件
  19. Java大数字运算(BigInteger类和BigDecimal类)
  20. Python实现用户输入年月日,程序打印出这是这一年的第多少天

热门文章

  1. Python输入和输出
  2. Javascript 高级程序设计--总结【二】
  3. OAuth2.0学习(1-11)新浪开放平台微博认证-使用OAuth2.0调用微博的开放API
  4. nginx根据域名做http,https分发
  5. ScrewTurn Wiki 初识
  6. TensorFlow saved_model 模块
  7. 201521123054 《Java程序设计》 第2周学习总结
  8. Linux系统Load average负载详细解释
  9. html中offsetTop、clientTop、scrollTop、offsetTop
  10. leetcode - Recover Binary Search Tree