首页 > 其他分享 >npm学习(十六)之package-lock.json和package.json的作用

npm学习(十六)之package-lock.json和package.json的作用

时间:2023-11-28 12:44:45浏览次数:36  
标签:npm package lock json 版本 库包

 

 

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

package-lock.json的作用就是锁定安装依赖时包的版本,并且需要上传到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文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。

标签:npm,package,lock,json,版本,库包
From: https://www.cnblogs.com/onesea/p/17861668.html

相关文章

  • npm学习(十四)之npm5踩过的坑!
     1.版本问题导致环境问题npm5之前我们第一次npminstall时是根据package.json来安装相关依赖的,但是它里面的版本不固定,因此默认会根据最高的版本来安装相关依赖,但是在npm5是根据package-lock.json来安装相关依赖的,但前提是没有在命令行中新安装依赖或者更改package.json,否则......
  • npm学习(十五)之理解npm、nvm、nodejs之间的关系
      nvmnvm:nodeJs版本管理工具,管理nodejs版本和npm版本,使用nvm安装nodejs时会将npm一起安装下来nodejsnodeJs: 一种高效的JavaScript运行环境npmnpm:是随同nodeJs一起安装的包管理工具,npm管理对应nodeJs的第三方插件  常见的使用场景有以下几种:  .允许用户从......
  • npm学习(十一)之package-lock.json
      package-lock.json描述对于npm修改node_modules树或package.json的任何操作,都会自动生成package-lock.json,它描述生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖项更新如何。此文件拟提交至来源资料库,并可作以下用途:描述依赖关系树的单一表示形式,以确保队......
  • npm学习(十)之如何使用创建、发布、使用作用域包
      前言要求npm版本2或更高作用域用于将相关包分组在一起,并为npm模块创建一个名称空间(类似于域)。这里有更详细的解释。如果一个包的名称以@开头,那么它就是一个有作用域的包。范围是@和斜杠之间的所有内容。@scope/project-name每个npm用户都有自己的范围。@userna......
  • npm学习(九)之README.md文件
      包括文档(readme.md)npm建议您包含一个readme文件来记录您的包。自述文件必须有文件名readme.md。文件扩展名.md表示该文件是一个标记(markdown)文件。当有人发现您的包时,该文件将出现在npm网站上。在开始之前,请查看一些包页面,了解可以添加到readme文件中的信息,并了解为......
  • npm学习(八)之更新发布包时如何使用语义化版本
      npm的语义化版本控制——Semanticversioning在新发布的代码中传达更改的程度非常重要,因为有时更新会破坏包需要的代码(称为依赖项)。语义化版本控制(semver)是一个旨在解决这个问题的标准。Semver出版商如果一个项目要与其他项目共享,那么它应该从1.0.0开始(尽管npm上......
  • npm学习(十七)之node_modules中的bin文件夹
      可执行文件在本地模式下,可执行文件指向的位置;./node_modules/.bin 以便可以通过npm运行的脚本使用它们。例如,当您运行测试,将在路径中 npmtest。npm为script字段中的脚本路径都加上了node_moudles/.bin前缀npm为script字段中的脚本路径都加上了node_moud......
  • C\C++ 使用RapidJSON库,轻松解析和生成JSON
    简介  RapidJSON是一个高效的C++JSON解析器和生成器。它专注于性能和易用性,使得处理JSON数据变得简单和快速。RapidJSON支持现代的JSON特性,如嵌套对象、数组、Unicode编码和注释。它的API简洁易用,可以轻松解析和生成JSON数据。无论你的项目需要处理大量的JSON数据,还是只需要解析......
  • Java 将JSON数组转成List对象集合
     一、从对象列表中提取并组装JSON字段的数据:(工具类)publicclassJsonMsgUtils<T>{/***从对象列表中提取并组装JSON字段的数据。**@paramlogs包含对象的列表*@paramtargetClass目标对象类型,表示JSON消息的结构......
  • C++标准库类std::packaged_task
    std::packaged_task是C++11引入的标准库类,用于封装可调用对象,如函数等,并将封装对象作为异步任务进行管理,通过与std::future结合使用,完成异步任务结果的获取。#include<iostream>#include<thread>#include<future>std::stringpromise_string(std::stringstr){......