NPM (Node.js Package Manager) 是 Node.js 的包管理工具,它可以方便地安装、更新、卸载和管理开发中需要用到的各种包和模块。
NPM 会随 Node.js 的安装一同被下载,所以这个不需要单独安装啦 🤭,
可以通过 npm -v
查看 npm 的版本信息。
本节主要介绍 npm 相关的周边知识:
.npmrc
。下面让我们一起开始学习吧!
npm 默认的镜像源地址是 https://registry.npmjs.org/
,
国内访问较慢,通常会使用淘宝开源的镜像站 https://registry.npmmirror.com/
。
查看当前的镜像源。
sh
npm config get registry
设置为淘宝源。
sh
npm config set registry https://registry.npmmirror.com/
在实际开发过程中可能会有频繁修改镜像源的场景,每次都手动维护,相对比较麻烦。
可以使用 yrm 进行管理。
① 安装
通过 npm
进行安装。
sh
npm i -g yrm --registry=https://registry.npmmirror.com
调整一下淘宝源地址。
sh
yrm add taobao https://registry.npmmirror.com
② 查看可用源
sh
yrm ls
③ 切换源
```sh yrm use npm
yrm use taobao ```
④ 添加自定义源
在一般的中大型公司里,都会有自己的内网私有镜像源,可以通过如下方式添加到工具中,方便统一管理。
```sh
yrm add
yrm add taobao https://registry.npmmirror.com ```
本小节将会介绍如下几个指令的常见用法,
init
,install
,update
,uninstall
,view
,run
。
更多指令请查阅 npm cli 文档。
初始化 Node.js 项目,通常配合 -y
参数使用,
sh
npm init -y
会自动在当前目录下创建 package.json
描述文件。
主要用于包的安装。
① 安装一个包到当前项目
以安装 express 为例 (一个流行的 Node web 框架),
```sh
npm i express
npm i express -D ```
不加 -D
参数依赖会出现在 package.json dependencies
中,
反之则出现在 devDependencies
中。
TIP:如何使用这个库。
```js // index.js const express = require('express')
const app = express() const port = 3000
app.get('/', (req, res) => { res.send('Hello World!') })
app.listen(port, () => {
console.log(Example app listening on port ${port}
)
console.log(visit http://127.0.0.1:${port}
)
})
```
运行,
sh
node index.js
使用浏览器访问 http://127.0.0.1:3000
就能看到响应的内容。
② 全局安装
添加 -g
参数,
对于一些带有 CLI 指令的包,通常使用这个参数,
比如前面介绍的 yrm
。
sh
npm i -g yrm
③ 安装记录的依赖
当打开一个存量项目的时候,依赖的很多包,这些包会被记录在 package.json 中,
只需要执行 npm install
,直接安装所有依赖即可。
更新某个包,
```sh
npm update
npm update express ```
当然也可以通过重新安装包的方式更新包。
```sh
npm install
npm install express ```
用于包的卸载。
```sh
npm uninstall
npm uninstall
查看某个包的基本信息。
```sh npm view pkg[@version]
npm view vue
npm view vue@alpha ```
用于运行 npm 自定义指令,需要配合 package.json
中的 scripts
一起使用,
例如 package.json
中 scripts
中有如下内容。
json
{
"scripts": {
"server": "node index.js",
"hello": "echo hello world",
"test": "node test.js"
}
}
js
// test.js
console.log('run tests')
我们就可以执行 npm run <scriptName>
来简化项目中命令的执行。
sh
npm run test
npm run hello
npm run server
当然一个脚本里也可以写多条指令用 &&
分割。
json
{
"scripts": {
"multiple":"node test.js && npm run hello && npm run test"
}
}
sh
npm run multiple
package.json
介绍package.json
是 Node.js 项目中的配置文件,用于描述项目的基本信息、依赖关系和脚本等细节信息。
本小节主要介绍 package.json
中一些常用配置项,
这些信息,大部分会在 npm 上被展示出来。
描述包名,
每个包名在 npm 上都是独一无二的,
一般由 小写字母
与连字符 -
构成。
json
{
"name": "react"
}
也支持带有 scope,@scope/pkgName
。
json
{
"name": "@vue/cli"
}
描述包版本,
json
{
"version": "1.0.0"
}
通常结构是 x.y.z
对应 major.minor.patch
。
升级版本号的原则如下:
major
:主版本号,不兼容的 API 修改时;minor
:次版本号,向下兼容的功能性新增;patch
:修订号,向下兼容的问题修复。一般用于一句话描述包的作用。
json
{
"description": "The progressive JavaScript framework for building modern web UI."
}
用于表明这个包的入口文件。
json
{
"main": "index.js"
}
例如当引入 express
的时候,如果有设置 main
属性,
js
const express = require('express')
实际上加载的就是 express/index.js
这个文件。
js
const express = require('express/index.js')
这个用于设置自定义 npm 脚本。
```json { "scripts": { "test": "node test.js" } }
```
在上一节 (2.6 npm run) 中也有介绍,
设置后通过 npm run
执行。
sh
npm run test
用于设置包的关键词,方便在 npm 中检索,
json
{
"keywords": ["vue","plugin","console"]
}
比如我们通过关键词 “color
,console
”
就能搜索到,彩色打印相关的包。
① 作用是什么
两个属性都用于表明,运行这个包所需要的其它外部依赖,
dependencies
标明生产环境下需要用到的包 (运行这个包必备的外部其它依赖),
devDependencies
标明开发环境下需要用到的包 (开发这个包时才用到的依赖)。
在实际开发中,通常会将开发依赖与生产依赖分开,以便减小生产环境的包大小,并提高构建和部署的速度。
下面举个例子方便理解,
以 express
为例,其 package.json 里有大量的依赖。
当我们的项目安装它的时候,会同时安装它 dependencies
指定的依赖,但不会安装 devDependencies
里的依赖。
但当我们开发运行 express 的源码时,在其源码项目里执行 npm install
时就会安装 devDependencies
里的依赖。
② 版本格式介绍
在不指定版本安装时,版本前面会附带一个 ^
,除了它还有 ~
。
json
"express": "^4.18.2"
"express": "~4.18.2"
"express": "4.18.2"
~
符号:保持主版本号和次版本号不变,只更新小版本号。例如 "~1.2.3"
表示安装 1.2.x 系列的最新版本;^
符号:保持主版本号不变,更新次版本和小版本号。例如 "^1.2.3"
表示安装 1.x.x 系列的最新版本。这样做的目的是提高依赖包的兼容性。使用 ^
或 ~
符号,可以在不破坏 API 的情况下,获取到最新的修复和功能更新。(当然只在包非常遵循前面说的版本更新规范前提下),
实际情况可能小版本也会带来 break change
,
这个问题在后面说的 package-lock.json
中会得到一定的解决。
① 项目依赖存放路径
这是项目里存放第三方包的一个目录,安装的第三方包都会出现在这里面,通常与 package.json 处在同一级目录,
就比如前面安装的 express
。
除了我们安装的包外,当然还可能包含一些间接依赖,比如上图中 express
的 dependencies
依赖。
② 全局依赖存放路径
使用如下指令即可获取全局依赖的存放路径。
sh
npm root -g
通过 npm i xx -g
安装的依赖就会存放在这里。
package-lock.json
主要用于锁定项目依赖的版本号,以确保在不同的机器和环境中安装相同的依赖和版本。
它的作用主要有以下几个方面:
npm install
命令时,npm 可以直接从缓存中读取已经下载的依赖包,从而加速依赖安装;package-lock.json
,则每次安装依赖时,npm 可能会自动更新依赖包的版本,这可能会引入 bug 或导致行为发生变化,从而导致项目出现问题;下面简单阐述一下各个属性的作用。
.npmrc
介绍.npmrc
文件是 NPM 的配置文件,它包含了一些 NPM 的配置信息,比如代理、镜像、命令别名等。通过修改 .npmrc
文件,可以更改 NPM 的默认行为。
全局中,.npmrc
文件通常位于用户主目录下 (Linux 和 Mac 是 ~/.npmrc
,Windows 是 %USERPROFILE%/.npmrc
)。
也可以在项目根目录下创建一个 .npmrc
文件,此时该项目下执行 npm 将会复用此份配置。
例如修改 registry
配置,让项目协作同学不用主动设置镜像源的地址,也能和自己保持一致。
```sh
registry=https://registry.npmjs.org/ ```
在这个目录下获取到的 registry
和其它目录就会不同,
更多配置项可以参考 NPM 的官方文档。
npx 是随 Node.js 安装附带的另一个指令,可以更方便的调用 Node.js 生态中的包 (通常是一些 Node CLI 工具),
使用 npx,可以在不全局安装一个命令行工具的情况下直接运行它,同时也不会污染全局环境。
比如 nodemon
这个 CLI 工具,可以在开发时替代 node
指令执行 js 文件,文件修改后自动重新执行。
```sh
npx nodemon test.js
npm i -g nodemon
nodemon test.js ```
本节主要介绍了 npm 相关的内容,包括 npm 的概念、如何配置国内镜像源、常用的 npm 指令、npm 配置文件及其作用,以及 npx 指令等。
其中,配置国内镜像源用于解决网络访问问题,常用的 npm 指令介绍了 install、uninstall、run 等,npm 相关的文件包括 package.json、package-lock.json 和 .npmrc
,npx 指令可以更方便地调用 Node.js 生态中的 CLI 工具。
package.json 主要用于描述项目基本信息、管理依赖,package-lock.json 则用于锁定安装的依赖版本,以避免出现不必要的依赖升级问题。
本节内容相对基础,建议熟练掌握 😄。