npm快速使用指南

224 阅读6分钟

介绍

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为要运行的文件名

image.png

image.png

下载第三方库

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的相关目录下面, 可以在此电脑的其它地方直接使用

简单的理解就是开发依赖安装的第三方法库只在开发阶段使用, 如: 打包工具, 提升开发效率的工具, 代码校验工具, 而生产依赖就是在生产中使用, 如: 第三方的函数库, 网络框架库 以nanoidnodemon举例:

  • 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

image.png

我们可以自己添加一些常用的命令到里面去:

{
  "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 镜像

image.png

安装node

安装node之前需要先获取安装的node版本

可以使用nvm ls available查看node的版本信息, 建议使用LTS(长期支持版)一列的

image.png

安装和卸载指定版本号的node

nvm install 版本号 # 安装指定版本的node

nvm uninstall 版本号 # 卸载指定版本node

安装完成以后会在nvm的安装目录下多一个对应版本号的文件

image.png 对应版本号目录下面的node文件自带对应版本的npmnpx image.png

切换node版本

可以使用nvm ls可以查看本地安装的node(带*表示当前使用的node版本)

image.png

使用nvm use 对应版本号的node(需要有管理员权限)可以切换node版本

image.png

注意: 每个node版本号对应的包是独立的, 比如你在16.15.0版本安装了一些包那么切换到14.17.3里是不能用16.15.0版本安装的包, 对应版本安装的包只会存放到对应的node版本目录中

更多nvm相关的信息可见GitHub nvm