npm作为Node.js的模块包管理器,可用来安装任何发布在npmjs系统上的模块。
npm简介
在我们安装Node.js的时候npm就一起安装好,不过有时候我们本机上的npm
不一定是最新版本,可以使用以下命令安装更新。
|
|
运行下面的命令,查看各种信息。
|
|
npm设置
- 镜像设置
由于在国内npm官方镜像地址经常被墙,建议设置npm镜像以加速模块下载过程,在这里推荐使用淘宝npm镜像。
|
|
- 安装cnpm
如果不想修改npm官方镜像,也可以使用淘宝提供的cnpm来代替npm
下载安装npm模块。
|
|
使用cnpm的命令来安装npm模块
|
|
常用npm命令
npm init
npm init
用来初始化生成一个新的package.json
文件。使用 -y
参数表示你能接受package.json
文件的一堆默认值:
|
|
npm set
npm set
用来设置环境变量,等于为npm init
设置了默认值。
例如使用以下命令设置了默认用户名、用户邮箱等信息
|
|
再使用npm config list -l
查看配置信息就能看到所设置的。
|
|
npm config
以下命令使得npm install --save
和npm install --save-dev
安装新模块时,允许的版本范围从上尖括号 ^
改成波浪号~
,即从允许小版本升级,变成只允许补丁包的升级。
|
|
- 波浪线
~
会匹配小版本号,忽略更高的版本。
比如:~1.2.3 will match all 1.2.x versions but will miss 1.3.0.
- 上尖括号
^
会匹配中版本号,忽略更高的版本。
比如:^1.2.3 will match any 1.x.x release including 1.3.0, but will hold off on 2.0.0.
官方文档
npm info
npm info
可以查看每个模块的具体信息。比如,查看express
模块的信息
|
|
这个对象的每个成员,都可以直接从info命令查询。
|
|
npm search
npm search
命令用于搜索npm仓库,它后面可以跟字符串,也可以跟正则表达式。
|
|
- 目前存在一个问题是当配置使用淘宝npm镜像后,MacOS上
npm search
命令报错,可以使用cnpm search
命令来暂时替代。
npm list
npm list
命令以树型结构列出当前项目安装的所有模块,以及它们依赖的模块
- 默认列出当前项目中安装的模块
|
|
- 加上global参数,会列出全局安装的模块
|
|
npm install
全局安装
将一个模块安装到系统目录中,各个项目都可以调用。一般来说,全局安装只适用于工具模块,比如eslint
和gulp
|
|
本地安装
将一个模块下载到当前项目的node_modules
子目录,只有当前项目中才能调用这个模块。
|
|
安装版本
在当前项目根目录下直接使用
npm install
命令直接安装package.json
中所配置的依赖模块。npm install
也支持直接输入Github代码库地址。npm install
命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上@
和版本号
|
|
安装参数
--save
:模块名将被添加到dependencies
,可以简化为参数-S--save-dev
: 模块名将被添加到devDependencies
,可以简化为参数-D--save-exact
参数,会在package.json
文件指定安装模块的确切版本
npm outdated
该命令用来查询使用模块是否已经更新。
- 查找全局模块是否已经更新
|
|
- 也可以查看检验当前和历史版本:
|
|
npm update
npm update
命令可以更新本地安装的模块
- 升级当前项目的指定模块
|
|
- 升级全局安装的模块
|
|
- 使用
-S
或--save
参数,可以在安装的时候更新package.json
里面模块的版本号
npm run
npm run
是 npm run-script
的别名用法,用来执行 package.json
中script
对象中配置的脚本命令。
|
|
例如对以上项目执行 npm run test
命令,即可调用执行mocha test/
命令行。
npm run
命令会自动在环境变量$PATH
添加node_modules/.bin
目录,所以scripts
字段里面调用命令时不用加上路径,这就避免了全局安装NPM模块,可以直接运行本地模块。直接运行
npm run
不给出任何参数,就会列出scripts
属性下所有命令
参数
npm run命令还可以添加参数。将参数传到所指定的命令行,需要参数之前要加上两个连词线 --
。
|
|
|
|
等同于
|
|
pre- 和 post- 脚本
npm run
为每条命令提供了pre-
和post-
两个钩子(hook)。以
npm run test
为例,执行这条命令之前,npm会先查看有没有定义pretest和posttest两个钩子,如果有的话,就会先执行npm run pretest
,然后执行npm run test
,最后执行npm run posttest
。
|
|
npm link
npm link
命令会在npm的全局模块node_modules目录内,生成一个符号链接,指向模块的本地目录。这样我们在开发npm模块的时候,就可以边开发边试用。
1.在模块目录src/myModule
下运行npm link
命令,会在npm的全局模块目录内,生成一个符号链接文件,该文件的名字就是package.json
文件中指定的文件名。这个时候,已经可以全局调用myModule模块了。但是,如果我们要让这个模块安装在项目内,还要下一步操作。
|
|
2.切换到项目目录src/myProject
,再次运行npm link
命令,并指定模块名。然后,就可以在你的项目中加载该模块了
|
|
上面命令等同于生成了本地模块的符号链接
3.在js脚本中就可以通过require的方式来引用该模块了。
|
|
这样一来,myModule的任何变化,都可以直接反映在myProject项目之中。但是,这样也出现了风险,任何在myProject目录中对myModule的修改,都会反映到模块的源码中。
4.如果你的项目不再需要该模块,可以在项目目录内使用npm unlink
命令,删除符号链接
|
|
npm bin
显示相对于当前目录的,Node模块的可执行脚本所在的目录(即.bin目录)。
npm publish
用于将当前模块发布到npmjs.com
- 申请用户名
npm adduser
- 登录
npm login
- 发布
npm publish
内置命令
npm test
内置命令,等同于执行
npm run test
npm start
内置命令,等同于执行
npm run start
npm stop
内置命令,等同于执行
npm run stop
npm restart
内置命令,等同于执行
npm run restart
命令实践推荐
npm-run-all
模块用于运行多个scripts
脚本命令,点击查看。
- 继发执行
|
|
等同于
|
|
- 并行执行
|
|
等同于
|
|
live-server
此模块启动一个HTTP服务器,添加自动刷新功能,具体查看文档
参考资料
- http://javascript.ruanyifeng.com/nodejs/npm.html
- https://docs.npmjs.com/
- https://npm.taobao.org/
- npm命令解析
- 如何使用NPM来管理你的Node.js依赖