npm 简介

全称:Node Package Manager npm 是随同 NodeJS 一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。

使用 npm 命令安装模块

$ npm install // 本地安装

$ npm install -g // 全局安装

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 仓库去获取压缩包。

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: