package.json说明

164 阅读2分钟

package.json作用

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

package.lock.json作用

package-lock.json它会在 npm更改node_modules 目录树 或者 package.json时自动生成的,它准确的描述了当前项目npm包的依赖树,并且在随后的安装中会根据 package-lock.json 来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的更新。

package-lock.json文件可以锁定所有模块的版本号,包括主模块和所有依赖子模块。package-lock.json 的作用是锁定依赖结构,即只要你目录下有package-lock.json 文件,那么你每次执行npm install 后生成的 node_modules 目录结构一定是完全相同的

当你执行npm install的时候,nodepackage.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。

生产依赖和开发依赖

开发依赖,在开发环境的时候使用 npm install 会安装该依赖中的内容,放在devdependencies下面

生产依赖,在项目打包上线时依旧会用到的依赖,需要他们项目才能正常运行,放在dependencies

-S / --save 表示放在生产依赖下面,开发和上线都需要使用。默认-S

-D / --save-dev 表示放在仅在开发阶段需要使用的包

-G 表示全局安装使用,安装之后其他地方都可以使用

如何区分安装时使用 -S、-D

进入 npm网站,搜索你需要安装的包,找到你需要的包,查看示例使用

为什么有些包名,以@开头,有些没有?

@开头的包是使用了 scopes 避免包名冲突,其中这个 scopes 在 npm 中必须要注册有组织(organization)才能发布这种格式的包。比方说 @babel/core 是 Babel 的核心编译器库,它隶属于 babel 这个组织下

类似于命名空间,防止命名冲突

包版本信息前面的符号说明

在 package.json 文件中,依赖包的版本号前面的符号表示版本号的范围。常见的符号和意义如下:

^:锁定主版本号(major),例如:"^3.5.2" 表示使用 3.x 版本,4.x 版本需要手动升级。
~:锁定次版本号(minor),例如:"~4.3.1" 表示使用 4.3.x 版本,4.3.x 版本可以自动安装,但 5.x 版本需要手动升级。
*:表示任何版本。
<、<=、>、>=:表示版本号的范围,例如:"<=3.2.1" 表示使用小于等于 3.2.1 的版本

如何在项目中限制 node的版本号和npm的版本号

  1. 在package.json中配置 engines,限定项目使用的Node/ Npm版本
  2. 在项目根目录下增加 .npmrc 文件(第一步配置 engines 只对 yarn生效,对npm无效) 在 .npmrc 文件中添加如下配置:engine-strict = true
"engines": {
    "node": "10.13.0",
    "npm": "6.4.1"
}