package.json和package-lock.json分析

本文详细介绍了npm的安装流程,包括查找配置、构建依赖树、下载资源和生成package-lock.json。重点讲解了package.json和package-lock.json的作用、区别以及如何管理开发依赖和生产依赖。还提及了npmrc文件和如何查看安装包的具体版本,以及如何更改npm镜像地址以提高安装速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

简介:

本地安装

安装的包分别放到对应的依赖位置

npm安装流程

1、查找 npm 的配置信息

2、构建依赖树

3、下载完整的依赖资源

4、生成package-lock.json

package.json详解

特殊符号 

dependencies 生产依赖

devDependencies 开发依赖

package-lock.json 详解

package-lock.json什么时候会变

如何查看安装的包版本

更改npm镜像地址


简介:

在分析之前一定要 了解 node环境下npm这个包管理工具, 因为在使用npm进行本地安装就会生成 pacage.json 这个文件(内部记录了我们安装的包的版本信息)。  这里又引入一个本地安装的概念,


本地安装

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

安装的包分别放到对应的依赖位置

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

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

如果既不想放在开发依赖也不想放在生产依赖,我们可以使用npm install --no-save

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

对于线上环境,我们只需要安装dependencies中的包,我们可以使用npm install --prod命令。

npm安装流程

1、查找 npm 的配置信息

执行安装命令之后,npm 首先会去查找 npm 的配置信息。 其中,我们最熟悉的就是安装时候的源信息。npm 会在项目中查找是否有 .npmrc 文件,没有的话会再检查全局配置的 .npmrc ,还没有的话就会使用 npm 内置的 .npmrc 文件。    具体了解npmrc文件看

2、构建依赖树

3、下载完整的依赖资源

有了依赖树 ,会根据依赖树下载依赖资源到node_modules中。  下载前会查看是否如果有缓存用缓存。  下载完整资源时会进行完整性检测 ,如果通过过了才会添加到node_modules中

4、生成package-lock.json

package-lock.json是自动生成的,当我们使用 npm install 安装包后就会自动生成。但是package-lock.json并不是每次都生成,只有在没有的情况下才会自动生成。

当存在并且有包的变化的时候会自动同步更新。

 

package.json详解

package.json文件,它是项目的配置文件,常见的配置有配置项目启动、打包命令,声明依赖包等。package.json文件是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。

♦ 下面只是对package.json中部分进行说明:

特殊符号 

说下 package.json 内部的一些符号说明,可能很多人没注意,下面截取了package.json文件中的一部分。

"dependencies": {
    "@handsontable/vue": "^12.1.2",
    "axios": "^0.18.1",
    "core-js": "3.6.5",
    "element-ui": "2.13.2",
    "express": "^4.18.2",
    "handsontable": "^12.1.2",
    "js-cookie": "2.2.0",
    "js-md5": "^0.7.3",
    "jsonp": "^0.2.1",
    "jspdf": "^2.5.1",
  },

^ : 兼容某个大版本,意味着下载的包可能会是更高的次版本号或者修订版本号。(也就是主版本不能变,次版本、修订版本可以随意变)。

~ :   兼容某个次版本,意味着有可能会有更高的修订版本号。(也就是主版本、次版本不能变,修订版本可以随意变)。

dependencies 生产依赖

dependencies 表示项目依赖,这些依赖都会成为你的线上生产环境中的代码组成的部分。当它关联到 npm 包被下载的时候,dependencies下的模块也会作为依赖,一起被下载。

devDependencies 开发依赖

devDependencies表示开发依赖, 不会被自动下载。这里面的包一般是程序员开发次才被用到。 比如  Webpack预处理器babel-loaderscss-loader ,还有些测试工具啊等等

平时我们开发,只要不开源其实放哪无所谓。但是如果你要开源代码库就需要严格区分啦,试想下如果你把  项目 不可缺少的依赖包下到了 devDependencies中,被别人下载后没下载到该依赖是会报错运行不了的,因为当你在安装第三方包的时候,只会同步下载第三方包dependencies里面的依赖

package-lock.json 详解

前面说了package.json里面的包版本不是一个具体的版本,而是一个最优版本。而package-lock.json里面定义的是某个包的具体版本,以及包之间的层叠关系。

一个 package-lock.json 里面的每个依赖主要是有以下的几部分组成的:

  • Version: 依赖包的版本号
  • Resolved: 依赖包的安装源(其实就是可以理解为下载地址)
  • Intergrity: 表明完整性的 Hash 值
  • Dev: 表示该模块是否为顶级模块的开发依赖或者是一个的传递依赖关系
  • requires: 依赖包所需要的所有依赖项,对应依赖包 package.jsondependencices 中的依赖项
  • dependencices: 依赖包 node_modeles 中依赖的包(特殊情况下才存在)。并不是所有的子依赖都有 dependencies 属性,只有子依赖的依赖和当前已安装在根目录的 node_modules 中的依赖冲突之后, 才会有这个属性。 这可能涉及嵌套情况的依赖管理。

package-lock.json什么时候会变

  1. package-lock.jsonnpm install的时候会自动生成。

  2. 当我们修改依赖位置,比如将部分包的位置从 dependencies 移动到 devDependencies 这种操作,虽然包未变,但是也会影响 package-lock.json,会将部分包的 dev 字段设置为 true

  3. 还有如果我们安装源 registry 不同,执行 npm install 时也会修改 package-lock.json。、

  4. 当我们使用npm install添加或npm uninstall移除包的时候,同时也会修改 package-lock.json

  5. 当我们更新某个包的版本的时候,同时也会修改 package-lock.json

如何查看安装的包版本

前面说了,package.json里面存储的包版本信息不是一个具体的版本,而是一个最优版本,也就是带^/~符号的,下面说下最优的看安装包的具体版本。

使用命令,npm list --depth 0查看本地安装的所有包信息,这种方式感觉是最好的

这里说下:

当我们的项目第一次去搭建的时候, 使用 npm install 安装依赖包, 并去提交 package.json、package-lock.json, 至于node_moduled目录是不用提交的。

更改npm镜像地址

 npm默认的镜像地址是国外地址https//registry.npmjs.org,如果用这个地址安装包的话安装速度会比较慢,我们平时开发最好就是将镜像设置为淘宝镜像。

//查看本地镜像源
npm config get registry  

// 设置阿里镜像
npm config set registry https://registry.npmmirror.com

转载于:详解package.json和package-lock.json - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值