package.json 与 package-lock.json文件的区别

这篇具有很好参考价值的文章主要介绍了package.json 与 package-lock.json文件的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是package.json文件

package.json记录当前项目中下载了哪些包(npm install xxx 包信息),记录你下载的包信息(地址、版本号等),不包含依赖包信息。

package.json文件记录你项目中所需要的所有模块。当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新。另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

 下图为package.json 的配置项

package.json 与 package-lock.json文件的区别

二、什么是package-lock.json文件

package-lock.json 就是用以记录当前状态下安装的各个npm package的具体来源和版本号,模块下载地址、及这个模块又依赖了哪些依赖。在首次安装依赖包时会创建package-lock.json文件。

npm5以前没有package-lock.json这个文件,需要保存依赖信息,每次安装时都要加上--save参数;npm5以后版本加入了package-lock.json文件。当安装包的时候,不需要加上--save参数,它会自动保存依赖信息,且会生成或更新package-lock.json这个文件。

三、为什么有了package.json,还需要package-lock.json文件呢?

当项目中已有package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。因为 package 只是指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次创建的安装都是相同的。

package-lock.json 文件主要作用有以下两点:

①.当删除node_module目录时,想通过npm install 恢复所有包时,提升下载速度。
②.锁定版本号,防止自动升级新版本。

正因为有了package-lock.json文件锁定版本号,所以当你执行npm install的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename(自动更新小版本号)或者npm install packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。

四、项目中如何生成package.json 和 package-lock.json 文件?

生成 package.json   =>   npm init -y

生成 package-lock.json  =>   npm install --package-lock-only

五、npm 安装包的方式

①.npm 安装包的方式分为本地安装和全局安装。安装使用 npm install 或简写形式 npm i

②.本地安装的包又分为开发依赖(devDependencies)和生产依赖(dependencies)

③.如果想要安装的包放在开发依赖(devDependencies)中,我们传递参数 --save-dev 或 -D 即可

④.如果想要安装的包放在生产依赖(dependencies)中,我们传递参数 --save 或 -S 即可

注意:如果我们没传递依赖参数。会把包默认安装到生产依赖(dependencies)中

注意:cnpm 不支持 package-lock

在使用 cnpm install 时候,并不会生成 package-lock.json 文件。cnpm install 的时候,就算你项目中有 package-lock.json 文件,cnpm 也不会识别,仍会根据 package.json 来安装,因此,尽量不要直接使用 cnpm install 安装项目依赖包。

六、npm install 后发生了什么?

package.json 与 package-lock.json文件的区别

npm默认所有的Node包都使用语义化版本号,这是一套指导开发人员如何增长版本号的规则。
每个版本号都形如:1.2.1,有三部分组成,依次叫主版本号、次版本号、修订号;

主版本号:当新版本无法兼容基于前一版本的代码时,则提高主版本号;

次版本号:当新版本新增了功能和特性,但仍兼容前一版本的代码时,则提高次版本号;

修订号:当新版本仅仅修正了漏洞或者增强了效率,仍然兼容前一版本代码,则提高修订号;

npm -v   //  查看npm版本
npm install -g dayjs    //  升级dayjs到最新版本
npm install -g dayjs@1.11.0   // 升级dayjs到指定版本 

 七、版本符号含义

指定版本:比如1.2.0,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。

①.波浪号:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,安装时不改变大版本号和次要版本号。
②.插入号:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,安装时不改变大版本号。
③. latest:安装最新版本

注意:如果大版本号为0,则插入号的行为与波浪号相同,因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。

所以建议使用~来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小 bug 可以得到修复。

package.json 中的版本符号
{
    "react":"^18.2.0",              //  插入符号 ^18.2.0 :匹配 18.X.X 的最新版本。
    "react-dom":"~18.2.0"      //  波浪符号 ~18.2.0 :匹配 18.2.X 的最新版本。
    "react-refresh": "0.11.0"     //  固定版本 0.11.0 : 匹配 0.11.0, 不会更新版本。
}
 文章来源地址https://www.toymoban.com/news/detail-456965.html

到了这里,关于package.json 与 package-lock.json文件的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • npm install 报错 The package-lock.json file was created with an old version of npm, npm WARN o

    解决方法直接看3 博主在VScode中用 npm install 命令下载包时报错,错误如下 npm版本过高,解决方法见第如下,亲测有效可以解决。 1.在vscode终端中输入如下命令行(可直接复制粘贴) 2. 然后输入 检查npm版本会显示一个低版本的 npm 的版本号。 3.然后再进行npm install 的操作就不

    2024年02月13日
    浏览(56)
  • json文件和jsonl文件有什么区别?什么情况下适合使用jsonl文件?

    众所周知,JSON 文件是使用 JSON(JavaScript Object Notation)格式存储数据的文件。它是一种结构化的文本格式,使用键值对的方式表示数据。JSON 文件通常包含一个根对象,可以包含多个嵌套的对象、数组和基本数据类型。 而 JSONL 文件 (JSON Lines),则是一种每行包含一个独立的

    2024年02月12日
    浏览(47)
  • 包管理工具与配置文件package.json

    理解: 在前端工程化发展中,nodejs的出现让前端开始了工程化,结束了仅静态页和切图的工作。他为前端提供了一个运行环境,让前端彻底变成了一个单独的工程,可以运行、编译、构建打包等。 版本管理: 不同的前端项目可能使用不同的nodejs版本开发,因此nodejs的版本管

    2024年02月08日
    浏览(42)
  • nvm, npm命令和package.json文件详解

    路径设置 镜像设置 查看命令 安装模块 卸载模块 更新模块 其他命令 以上几个命令可在package.json中自定义,如下:

    2024年02月11日
    浏览(35)
  • 使用ts-node命令运行ts文件时报错(Warning: To load an ES module, set “type“: “module“ in the package.json...)

    使用 ts-node 运行TS文件时报错。 错误信息1: 错误信息2: ts-node 版本: ^10.8.0 , typescript 版本: ^4.6.3 。 tsconfig.json 文件内容如下 在网上查找了一些资料,出现类似问题的有很多,链接如下: http://www.longant.cn/en/node/7289 https://stackoverflow.com/questions/62096269/cant-run-my-node-js-typescr

    2024年02月16日
    浏览(57)
  • package.json(2)

    发布配置 和npm 项目包发布相关的配置。 private private 字段可以防止我们意外地将私有库发布到 npm 服务器。只需要将该字段设置为 true: preferGlobal preferGlobal 字段表示当用户不把该模块安装为全局模块时,如果设置为 true 就会显示警告。它并不会真正的防止用户进行局部的安

    2024年02月06日
    浏览(33)
  • package.json字段说明

    main :包的主要入口文件。当其他项目使用您的包时,它们将引入您指定的 main 文件。通常,这是一个 JavaScript 文件,用于导出包的功能、类或模块。 publishConfig :用于配置发布到npm相关的配置。 main :commonjs模块文件入口, 当包被发布后,会用该字段替换掉上一级的 main 字

    2024年02月06日
    浏览(40)
  • package.json 详解

    npm package.json 文件的详细说明。 Version:9.8.1 本文档包含了关于 package.json 文件中所需内容的所有信息。它必须是有效的 JSON 格式,而不仅仅是 JavaScript 对象字面量。 如果您计划发布您的包,那么 package.json 文件中最重要的字段是 name 和 version ,它们是必需的。 name 和 version 共同

    2024年02月10日
    浏览(37)
  • Lock和synchronized的区别

    1、Lock是一个接口,而synchronized是一个Java,synchronized是内置的语言实现,Lock是代码层面的实现 2、Lock可以选择性的获取锁,如果一段时间获取不到,咋可以不要了。synchronized不行,不达目的不罢休。借助这个特性,Lock可以避免死锁,而synchronized不惜通过谨慎的设计才

    2024年02月08日
    浏览(39)
  • lock 和synchronized 的区别

    1  lock是接口实现,synchronized是内置方法native实现 2 lock可以主动释放锁,synchronized只能是加锁的代码块执行完毕或者遇到异常退出被动的释放锁 3 性能方面,如果竞争资源不是很激烈的情况,两者的性能差不太多,如果是在竞争资源激烈的情况下,lock的性能要优于synchronize

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包