介绍
npm 是 Node.js 的包管理工具, 用来安装各种 Node.js 的第三方库(包), 官方仓库地址 www.npmjs.com
安装node
因为npm是node自带的包管理工具, 所以先安装node, 傻瓜式下一步下一步即可或者可以使用下面介绍的nvm
初始化package
首先确认是否安装成功npm, 使用命令查看版本
npm -v # 查看 npm 的版本
npm version # 查看更详细的版本信息
新建一个文件夹
# mkdir xxx 新建xxx目录
# cd xxx 进入该目录
mkdir learn-npm && cd learn-npm # 新建一个目录后进入该目录
生成package.json
npm init # 初始化一个package.json, 需要依次输入项目的一些信息
npm init -y # 初始化一个package.json(全部使用默认值)
这样就会在当前目录下生成一个package.json
文件了, 这个文件很重要, 默认的一些字段如下:
{
"name": "learn-npm", // 项目名称
"version": "1.0.0", / 版本号
"description": "", // 描述
"main": "index.js", // 入口文件
"scripts": { // npm script 命令
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], // 项目相关的关键字
"author": "", // 作者
"license": "ISC" // 授权协议
}
然后可以新建一个index.js
文件, 里面可以写一些js代码, 运行在终端中使用node xxx
这里的xxx为要运行的文件名
下载第三方库
npm insall xxx --save # 安装第三方库到生产依赖, 简写 npm i xxx -S
npm insall xxx --save-dev # 安装第三方库到开发依赖, 简写 npm i xxx -D
npm insall xxx --global # 安装第三方库到全局, 简写 npm i xxx g
下载的第三方库会被保存到
node_modules
目录下
生产依赖和开发依赖
- 开发依赖: 安装的包会在
package.json
文件中的devDependencies
字段所记录 - 生产依赖: 安装的包会在
package.json
文件中的dependencies
字段所记录 - 全局: 安装的包会放到全局node的相关目录下面, 可以在此电脑的其它地方直接使用
简单的理解就是开发依赖安装的第三方法库只在开发阶段使用, 如: 打包工具, 提升开发效率的工具, 代码校验工具, 而生产依赖就是在生产中使用, 如: 第三方的函数库, 网络框架库
以nanoid
和nodemon
举例:
- nanoid: 可以生成一个字符串ID
- nodemon: 代替node命令来运行文件, 可以监听文件的改变自动重新运行
就可以将
nanoid
安装为生产依赖, 将nodemon
安装为开发依赖获取全局
npm install nanoid --save
npm install nodemon --save-dev
安装多个包, 包名之间使用空格隔开即可 安装完成以后就
package.json
文件会出现对应的依赖记录
{
...
"dependencies": {
"nanoid": "^4.0.0"
},
"devDependencies": {
"nodemon": "^2.0.16"
}
}
有了这些依赖的记录后, 当项目需要发送给别人或是上传到远程存储库时, 是不会上传node_modules
的因为太大了, 而是将package.json
文件一起跟其他的项目文件上传, 这样别人拿到项目以后执行npm install
(简写npm i
)就会自动下载package.json
里面记录的相关依赖
引入下载的包并使用
在node中常用的两种模块化标准是CommonJs
(默认)和`ESModule
// CommonJs
const nanoid = require("nanoid");
// ESModule
import nanoid from "nanoid";
// import * as nanoid from "nanoid";
有一些库两种方式都支持, 也可以通过查看库文件的package.json
文件的type
字段(默认commonjs
)
{
"type": "module" // commonjs
}
因为在node中默认是CommonJs
模块化的, 如果要在node中使用ESModule
, 需要修改package.json
中的type
字段为module
配置淘宝镜像
使用npm安装第三方库是需要访问国外的网络的, 有的时候很慢, 可以将npm的源设置为国内的淘宝镜像, 如下:
# 配置了镜像源以后 npm 命令换成 cnpm 就可以使用国内的环境下载 npm 包了
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 测试命令
cnpm -v
npm的其他命令
下载指定版本号的包
# 具体的版本号可以在官方仓库查看
npm install 包名@版本号
更新第三方库
# 更新包
npm update 包名
查看当前已经安装的模块
npm list # 查看当前项目安装的包
npm list -g # 查看全局安装的包
查看包的版本信息
npm view 包名 version # 查看包的最新版本
npm view 包名 versions # 查看包的历史版本
查看包的详细信息
npm info 包名
卸载包
npm uninstall 包名 # 卸载当前项目的包
npm uninstall 包名 -g # 卸载全局安装的包
删除包其实就是在
node_modules
目录下删除跟这个包有关的文件, 还有package.json
文件的依赖记录, 自己手动删除也可以
npm script
package.jaon
里的script
字段里面可以添加一些命令, 如下;
{
"scripts": {
// 默认注册了一个 test 脚本命令, 对应的命令为 echo \"Error: no test specified\" && exit 1
"test": "echo \"Error: no test specified\" && exit 1"
}
执行脚本命令使用npm run xxx
, 其中xxx
为对应的脚本命令, 上面的就是npm run test
, 就会自动执行test
对应的命令echo \"Error: no test specified\" && exit 1
意思是打印"Error: no test specified"然后退出对应的退出码为1
我们可以自己添加一些常用的命令到里面去:
{
"scripts": {
"dev": "nodemon --loader ts-node/esm ./src/app.ts",
"hello": "echo \"hello world\""
}
更详细的npm script可见阮一峰 npm script
nvm
其实使用node官方的安装包安装node挺慢的, 我用的是windows所以我一般都是使用node的版本工具nvm安装的
nvm是node版本管理器,用于管理多个Node版本的工具, 可以在不同开发环境中切换不同的node版本
windown安装包可以从这里下载nvm-windows
在安装nvm时如果本地已经安装有node了会提示是否把本地的node纳入版本管理, 但还是建议把之前安装的node卸载了, 有的ndoe版本 nvm无法把它纳入版本管理(之前遇到过, 不记的版本号了)
使用nvm v
命令查看是否安装成功(有对应的版本号输出即可)
设置nvm的镜像源
找到安装nvm的目录, 默认在C:/用户/xxx/AppData/Roaming/nvm
, 我一般习惯放到一个盘中如: d
,e
, 打开settings.txt
文件, 添加下面的两行配置
node_mirror: https://npm.taobao.org/mirrors/node/ # 添加 node 镜像
npm_mirror: https://npm.taobao.org/mirrors/npm/ # 添加 npm 镜像
安装node
安装node之前需要先获取安装的node版本
可以使用nvm ls available
查看node的版本信息, 建议使用LTS
(长期支持版)一列的
安装和卸载指定版本号的node
nvm install 版本号 # 安装指定版本的node
nvm uninstall 版本号 # 卸载指定版本node
安装完成以后会在nvm的安装目录下多一个对应版本号的文件
对应版本号目录下面的node文件自带对应版本的
npm
和npx
切换node版本
可以使用nvm ls
可以查看本地安装的node(带*
表示当前使用的node版本)
使用nvm use 对应版本号的node
(需要有管理员权限)可以切换node版本
注意: 每个node版本号对应的包是独立的, 比如你在16.15.0
版本安装了一些包那么切换到14.17.3
里是不能用16.15.0
版本安装的包, 对应版本安装的包只会存放到对应的node版本目录中
更多nvm相关的信息可见GitHub nvm