npm


2020-11-09 上次更新时间:4/28/2022, 2:19:43 PM 0

npm:Node Package Manager,NodeJS 的包管理和分发工具

# 简介

npm 已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布、传播、依赖控制。npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。

npm 是随同 Node.js 一起安装的包管理工具,能解决 Node.js 代码部署上的很多问题,常见的场景有以下几种:

  • 允许用户从 npm 服务器下载别人编写的第三方包到本地使用。
  • 允许用户从 npm 服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到 npm 服务器供别人使用。

npm 的背后,是基于 couchdb 的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。

# 常用命令

命令 说明
npm init 初始化生成 package.json 文件
npm install 安装包
npm run 执行脚本
npm set 设置环境变量
npm info 查看模块的具体信息
npm search 搜索 npm 仓库,支持正则表达式
npm list 列出安装的所有模块以及它们的依赖模块

# npm init

npm init 会生成一个 package.json 文件。package.json 是用来记录下包依赖的描述文件。

# package.json 属性说明

{
  "name": "demo", // 包名
  "version": "1.0.0", // 版本号
  "keywords": "", // 关键字,作用于 npm search
  "description": "",
  "main": "index.js", // 执行入口文件
  "browser": "index.js", // 同 main,当包为 web 包时,browser 的优先级比 main 高。
  "bin": { // 可执行文件
    "myapp": "./cli.js"
  },
  "scripts": { // 自定义脚本 ??preinstall ?
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "config": { // 设置配置属性,配合 scripts 属性使用
    "port": "8080"
  },
  "files": [], // 当别人安装你的包时,所需要安装的文件。默认:"*"
  "homepage": "", // 项目官网地址
  "bugs": {  // 提交bug的方式
    "url": "",
    "email": ""
  },
  "man": "", // 项目手册
  "repository": { // 代码仓库地址 执行 npm docs 可以直接跳转到这里
    "type": "git",
    "url": ""
  },
  "engines": { // 指定代码运行环境
    "node": ">=0.10.3 <0.12"
  },
  "os": ["!win32"], // 指定代码运行的操作系统
  "cpu": [], // 指定代码运行时的 cpu 架构
  "publishConfig": {}, // 发布配置
  "author": "",
  "contributors": "", // 贡献者
  "maintainers": "", // 维护者
  "license": "ISC",
  "dependencies": {}, // 生产环境依赖
  "devDependencies": {}, // 开发环境依赖
  "peerDependencies": {}, // 声明使用该包时,宿主环境必需存在的插件
  "bundledDependencies": {}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# package-lock.json

package-lock.json 是随着安装的时候一起生成的。它可以锁定安装时的包的版本号,生成后需要上传到git,以保证其他人在 npm install 时大家的依赖能保持一致。

# npm install

npm install 在默认情况下会从 http://npmjs.com 搜索或下载包,将包安装到当前目录的 node_modules 子目录下。但是也可以通过指令将包安装到全局环境下。

# 基础使用

# 本地安装
$ npm install <package name>

# 也支持直接输入 git 地址
npm install git://github.com/package/path.git

# 全局安装
$ sudo npm install -global <package name>
1
2
3
4
5
6
7
8

# 本地安装与全局安装

一般来说,全局安装只适用于工具模块,比如 eslint 、gulp、cli 脚手架等。

模式 命令 可通过 require 使用 注册 PATH
本地安装 npm install [package name]
全局安装 npm install -g/-global [package name]

# 指定版本

install 命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上 @ 和版本号。

语义化版本:(package.json 中也一样)

  • ^version: 中版本和小版本( ^1.0.1 -> 1.x.x )
  • ~version: 小版本 ( ~1.0.1 -> 1.0.x )
  • version: 特定版本
  • latest: 最新版本
  • 关系表达式: 符合表达式的版本 ( >2.1.1 -> 2.1.0 )
# 安装3.x.x 最新版本
npm install jquery@^3.4.1

# 安装3.4.x 最新版本
npm install jquery@~3.4.1

# 特定版本 0.1.1
npm install sax@0.1.1

# 最新版本
npm install sax@latest

# 安装版本 大于0.1.1且小于0.2.0
npm install sax@">=0.1.0 <0.2.0"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

如果删除了依赖,重新执行 npm install,则会根据 package.json 中的这些语义化版本号拉取新的版本

# 保存依赖

只是执行 npm install package-name,只会将包安装到 node_modules 目录中,不会修改 package.json 。需要使用以下参数,指定模块属于哪一种性质的依赖关系,即出现在 packages.json 文件的哪一项中。

  • --save:模块名将被添加到 dependencies,可以简化为参数 -S
  • --save-dev:模块名将被添加到 devDependencies,可以简化为参数 -D
npm install sax --save
npm install node-tap --save-dev
# 或者
npm install sax -S
npm install node-tap -D
1
2
3
4
5

# 安装生产依赖

npm install 默认会安装 dependencies 字段和 devDependencies 字段中的所有模块,如果使用 --production 参数,可以只安装 dependencies 字段的模块。

npm install --production
# 或者
NODE_ENV=production npm install
1
2
3

# 安装私有包

npm 默认的源是 https://registry.npmjs.org/,如果需要从私有 npm 上下载包,需要使用 nrm 切换源之后,再安装。

《使用nrm快速的切换npm源》

# npm run

npm run 命令是用来执行脚本的。package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供 npm 直接调用。

npm run 是 npm run-script 的简写

package.json

{
  "name": "myproject",
  "scripts": {
    "test1": "mocha test/"
  }
}
1
2
3
4
5
6

执行

npm run test1
1

# 创建与发布

《开发一个vue组件并发布到npm》

# 搭建私有npm

《cnpm搭建》

参考文章:

上次更新时间: 4/28/2022, 2:19:43 PM