npm 简介
全称:Node Package Manager npm 是随同 NodeJS 一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。
使用 npm 命令安装模块
$ npm install
$ npm install
package.json
记录项目名称、版本号、项目描述,以及列出当前项目所依赖的其他库的信息和依赖库的版本号。
如何生成 package.json 文件
$ npm init
// 或者
$ npm init --yes
// 基本内容如下
{
"name": "Hello world",
"version": "1.0.0",
"description": "My first project",
"repository": "...",
"author": "xxx@gmail.com",
"license": "UNLICENSED",
"private": true,
}
//private 字段可以声明当前项目是否是私有的,为 true 则 npm 不能发布它
package.json 常用属性说明
scripts
scripts属性用于配置一些脚本命令,以键值对的形式存在配置后通过 npm run 的 key 来执行这个命令对于常用的 start、test、stop、restart 可以省略掉 run 直接通过 npm start 等方式运行
dependencies、devDependencies 和 peerDependencies 的区别
dependencies 是指无论开发环境还是生产环境都需要依赖的包。通常是我们项目实际开发要用到的一些库,如 react、react-dom、react-redux、axios 等。devDependencies 只包含用在 dev 和 test 环境上的包。一些包在生产环境是不需要的,如 webpack、babel 等。如:通过 npm install webpack --save-dev(或-D),安装到 devDependencies。peerDependencies 对等依赖。就是你依赖的一个包,它必须是以另外一个宿主包为前提的;比如 element-plus 是依赖于 vue3 的,ant design是依赖于 react、react-dom;
engines
用于指定 Node 和 NPM 的版本号(安装时会检查对应的引擎版本,不符合报错)
browserslist
用于配置打包后的JS浏览器的兼容情况,它是为 webpack 等打包工具服务的一个属性。
版本号说明
semver版本规范 X.Y.Z X 主版本号(major): 当你做了(可能)不兼容之前版本的API修改; Y 次版本号(minor): 当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本); Z 修订号(patch): 当你做了向下兼容的问题修正(没有新功能,修复之前版本的bug);
版本号前的 ^ 和 ~ 的区别
x.y.z 表示一个明确的版本号 ^x.y.z 表示x是保持不变的,y和z永远安装最新的版本; ~x.y.z 表示x和y保持不变的,z永远安装最新的版本;
package-lock文件
从registry仓库下载npm包,下载后会做缓存,放在package-lock文件里面 name - 项目名 version - 版本 lockfileVersion - lock文件的版本 requires - 跟踪模块的依赖关系 dependencies - 项目的依赖
//例如:
axios:{
version: 0.20.0 //代表实际安装的版本
resolved: ... //记录下载的地址,registry仓库中的位置
integrity: ... //用来从缓存中获取索引,再通过索引去获取压缩包文件
dependencies: ... //记录当前模块的依赖
}
npm install 原理
执行 npm install -> 查找 package.json -> 检测是否有 lock 文件没有 lock 文件 -> 分析依赖关系(可能包会依赖其他的包)-> 从 registry 仓库下载压缩包(并做缓存,npm5开始) -> 解压到 node_modules -> 生成 package-lock 文件 -> 完成安装。有 lock 文件 -> 去 lock 文件里检查包的版本是否和 package.json 一致(按 semver 版本规范检测),如果一致则优先查找缓存,得到压缩包;如果不一致,重新构建依赖关系,再从 registry 仓库去获取压缩包。
好文推荐
发表评论