npm 是什么

NPM (Node.js Package Manager) 是 Node.js 的包管理工具,它可以方便地安装、更新、卸载和管理开发中需要用到的各种包和模块。

NPM 会随 Node.js 的安装一同被下载,所以这个不需要单独安装啦 🤭,

可以通过 npm -v 查看 npm 的版本信息。

本节主要介绍 npm 相关的周边知识:

下面让我们一起开始学习吧!

1 配置国内镜像源

npm 默认的镜像源地址是 https://registry.npmjs.org/

国内访问较慢,通常会使用淘宝开源的镜像站 https://registry.npmmirror.com/

1.2 手动切换

查看当前的镜像源。

sh npm config get registry

设置为淘宝源。

sh npm config set registry https://registry.npmmirror.com/

1.3 使用镜像源管理工具

在实际开发过程中可能会有频繁修改镜像源的场景,每次都手动维护,相对比较麻烦。

可以使用 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 ```

2 常用 npm 指令介绍

本小节将会介绍如下几个指令的常见用法,

initinstallupdateuninstallviewrun

更多指令请查阅 npm cli 文档

2.1 init

初始化 Node.js 项目,通常配合 -y 参数使用,

sh npm init -y

会自动在当前目录下创建 package.json 描述文件。

2.2 install

主要用于包的安装。

① 安装一个包到当前项目

以安装 express 为例 (一个流行的 Node web 框架),

```sh

作为 dependencies 安装

npm i express

作为 devDependencies 依赖安装

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,直接安装所有依赖即可。

2.3 update

更新某个包,

```sh npm update

例如

npm update express ```

当然也可以通过重新安装包的方式更新包。

```sh npm install

例如

npm install express ```

2.4 uninstall

用于包的卸载。

```sh

项目包

npm uninstall

全局包

npm uninstall -g ```

2.5 info/view

查看某个包的基本信息。

```sh npm view pkg[@version]

npm view vue

npm view vue@alpha ```

2.6 run

用于运行 npm 自定义指令,需要配合 package.json 中的 scripts 一起使用,

例如 package.jsonscripts 中有如下内容。

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

3 package.json 介绍

package.json 是 Node.js 项目中的配置文件,用于描述项目的基本信息、依赖关系和脚本等细节信息。

本小节主要介绍 package.json 中一些常用配置项,

这些信息,大部分会在 npm 上被展示出来。

3.1 name

描述包名,

每个包名在 npm 上都是独一无二的,

一般由 小写字母 与连字符 - 构成。

json { "name": "react" }

也支持带有 scope,@scope/pkgName

json { "name": "@vue/cli" }

3.2 version

描述包版本,

json { "version": "1.0.0" }

通常结构是 x.y.z 对应 major.minor.patch

升级版本号的原则如下:

3.3 description

一般用于一句话描述包的作用。

json { "description": "The progressive JavaScript framework for building modern web UI." }

3.4 main

用于表明这个包的入口文件。

json { "main": "index.js" }

例如当引入 express 的时候,如果有设置 main 属性,

js const express = require('express')

实际上加载的就是 express/index.js 这个文件。

js const express = require('express/index.js')

3.5 scripts

这个用于设置自定义 npm 脚本。

```json { "scripts": { "test": "node test.js" } }

```

在上一节 (2.6 npm run) 中也有介绍,

设置后通过 npm run 执行。

sh npm run test

3.6 keywords

用于设置包的关键词,方便在 npm 中检索,

json { "keywords": ["vue","plugin","console"] }

比如我们通过关键词 “colorconsole” 就能搜索到,彩色打印相关的包。

3.7 devDependencies/dependencies

① 作用是什么

两个属性都用于表明,运行这个包所需要的其它外部依赖,

dependencies 标明生产环境下需要用到的包 (运行这个包必备的外部其它依赖),

devDependencies 标明开发环境下需要用到的包 (开发这个包时才用到的依赖)。

在实际开发中,通常会将开发依赖与生产依赖分开,以便减小生产环境的包大小,并提高构建和部署的速度。

下面举个例子方便理解,

express 为例,其 package.json 里有大量的依赖。

当我们的项目安装它的时候,会同时安装它 dependencies 指定的依赖,但不会安装 devDependencies 里的依赖。

但当我们开发运行 express 的源码时,在其源码项目里执行 npm install 时就会安装 devDependencies 里的依赖。

② 版本格式介绍

在不指定版本安装时,版本前面会附带一个 ^,除了它还有 ~

json "express": "^4.18.2" "express": "~4.18.2" "express": "4.18.2"

这样做的目的是提高依赖包的兼容性。使用 ^~ 符号,可以在不破坏 API 的情况下,获取到最新的修复和功能更新。(当然只在包非常遵循前面说的版本更新规范前提下),

实际情况可能小版本也会带来 break change

这个问题在后面说的 package-lock.json 中会得到一定的解决。

4 node_modules

① 项目依赖存放路径

这是项目里存放第三方包的一个目录,安装的第三方包都会出现在这里面,通常与 package.json 处在同一级目录,

就比如前面安装的 express

除了我们安装的包外,当然还可能包含一些间接依赖,比如上图中 expressdependencies 依赖。

② 全局依赖存放路径

使用如下指令即可获取全局依赖的存放路径。

sh npm root -g

通过 npm i xx -g 安装的依赖就会存放在这里。

5 package-lock.json

package-lock.json 主要用于锁定项目依赖的版本号,以确保在不同的机器和环境中安装相同的依赖和版本。

它的作用主要有以下几个方面:

下面简单阐述一下各个属性的作用。

6 .npmrc 介绍

.npmrc 文件是 NPM 的配置文件,它包含了一些 NPM 的配置信息,比如代理、镜像、命令别名等。通过修改 .npmrc 文件,可以更改 NPM 的默认行为。

全局中,.npmrc 文件通常位于用户主目录下 (Linux 和 Mac 是 ~/.npmrc,Windows 是 %USERPROFILE%/.npmrc)。

也可以在项目根目录下创建一个 .npmrc 文件,此时该项目下执行 npm 将会复用此份配置。

例如修改 registry 配置,让项目协作同学不用主动设置镜像源的地址,也能和自己保持一致。

```sh

.npmrc

registry=https://registry.npmjs.org/ ```

在这个目录下获取到的 registry 和其它目录就会不同,

更多配置项可以参考 NPM 的官方文档

7 npx 介绍

npx 是随 Node.js 安装附带的另一个指令,可以更方便的调用 Node.js 生态中的包 (通常是一些 Node CLI 工具),

使用 npx,可以在不全局安装一个命令行工具的情况下直接运行它,同时也不会污染全局环境。

比如 nodemon 这个 CLI 工具,可以在开发时替代 node 指令执行 js 文件,文件修改后自动重新执行。

```sh

直接通过npx 调用执行

npx nodemon test.js

等价于

① 全局安装CLI工具

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 则用于锁定安装的依赖版本,以避免出现不必要的依赖升级问题。

本节内容相对基础,建议熟练掌握 😄。