npm常用指令
最后更新于:2022-04-02 06:52:15
## npm常用指令
这一小节将介绍我们平时最常用到的几个指令。
[TOC]
npm init
命令
$ npm init [-f|--force|-y|--yes]
npm init
用来初始化生成一个新的package.json
文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。
如果使用了-f
(代表force
)、-y
(代表yes
),则跳过提问阶段,直接生成一个新的package.json
文件。
>Tips:
对package.json没有概念的朋友,请查阅package.json的使用这一小节
npm install
命令
$ npm install (with no args, in package dir)
$ npm install [<@scope>/]<name>
$ npm install [<@scope>/]<name>@<tag>
$ npm install [<@scope>/]<name>@<version>
$ npm install [<@scope>/]<name>@<version range="">
$ npm install <tarball file="">
$ npm install <tarball url="">
$ npm install <folder>
alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--dry-run]
>npm install
这个命令官网的API写了很多,这里只介绍常用的
$ npm install (在模块根目录下,不带参数)
将模块的所有第三方依赖模块安装到根目录下的 node_modules 文件夹中,$ npm install -g(在模块根目录下)
将当前模块全局安装,这样,你就可以在未发布模块的情况下,在自己的电脑上全局使用当前模块(即在命令行,无论处于哪个目录下,都可以引用当前模块,就像你使用npm命令一样)
>Tips: 上面提到的两种安装方式,都会将package.json中,在dependencies和devDependencies这两个key下罗列的所有模块都进行安装,如果npm install这个命令后面加上参数 --production(或者将NODE_ENV这个环境变量设为 production),npm将只安装罗列在dependencies这个key下的模块
$ npm install <folder>
安装指定路径下的模块,该路径的根目录下应该包含package.json文件。$ npm install [<@scope>/]<name> [-S|--save|-D|--save-dev|-O|--save-optional]
>Tips: scope是模块的作用域 ,可选参数,一般只在发布私有模块的时候使用,绝大部分情况下,你用不到,这里可以先忽略。有兴趣可参考npm 私有模块的使用
大多数场景下,我们会使用这个这个命令来安装最新发布在npm上的指定<name>
的模块。
以sax模块为例:
$ npm install sax
这个命令就是从npm上拉取最新发布的sax模块,这个命令等价于
$ npm install sax@latest
本质上 ,执行的命令是:
$ npm install [<@scope>/]<name>@<tag>
tag是在模块发布的时候给模块打的一个标签,其他开发者可以通过@不同的tag来安装打了相应tag的版本
npm install
命令根据安装环境的不同,有3个可选的参数可以加,这几个参数将在package.json
中相应的key
下面保存要安装的模块-S, --save
: 这个模块将作为dependencies
的成员。-D, --save-dev
: 这个模块将作为devDependencies
的成员。-O, --save-optional
: 这个模块将作为optionalDependencies
的成员
$ npm install [<@scope>/]<name>@<version>
<version>
和<tag>
类似,都是在开发者发布模块时打上的标签,其他开发者可以通过这个标签指定安装某一个版本的模块
$ npm install <tarball file="">
>Tips: tarball是Linux下最方便的打包命令
安装当前文件系统中指定路径的文件
例子:
$ npm install ./package.tgz
$ npm install <tarball url="">
从指定的URL地址下载并安装模块
例子:
$ npm install https://github.com/indexzero/forever/tarball/v0.5.6
npm uninstall
命令
$ npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]
aliases: remove, rm, r, un, unlink
与npm install
相反,不再赘述
npm update
命令
#升级当前项目的指定模块(在项目根目录下使用)
$ npm update [package name]
#升级全局安装的模块
$ npm update -g [package name]
npm update
命令会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装。
使用-S
或--save
参数,可以在安装的时候更新package.json
里面模块的版本号。
>注意,从npm v2.6.1 开始,npm update只更新顶层模块,而不更新依赖的模块,以前版本是递归更新的。如果想取到老版本的效果,要使用下面的命令:
>$ npm --depth 9999 update
npm link
命令
$ npm link (in package dir)
$ npm link [<@scope>/]<pkg>[@<version>]
alias: npm ln
我们假设这样一个场景,你刚开发完一个模块A(模块的名称暂定为aaa),你准备做发布前的最后测试。
一种实现的方式是:
- cd到模块A的根目录下,执行
npm install -g
,模块A就全局的安装到了你电脑上。 - 切换一个新的目录,使用
npm init
构建一个新的工程B,这时,你就可以用IDE打开index.js,通过require('aaa')来使用模块A了。
上面的实现方式有一个问题,当你在测试过程中发现模块A有bug或接口不合理的地方,你需要在模块A的源码上做对应的修改,但是,这个改动只有重新执行npm install -g
之后才会生效(模块A的修改无法实时的更新到全局)。这就稍显麻烦了,是否有办法让模块A的改动及时反馈的全局呢?有的!
我们来介绍满足这个需求的另外一种实现方式:
- cd到模块A的根目录下,执行
npm link
,这时,在全局的npm模块仓库(node_modules)中,会创建一个指向模块A根目录的符号链接(symlink) - 切换到工程B,执行
npm link aaa
(Tip:aaa是模块A的名称,不是根目录的名称),这时,在工程B的根目录的node_modules文件夹下面会引入模块A。
使用npm link
就能实现模块A的修改实时生效。
>Tips:
当你不再需要在工程里面使用“aaa”模块时,应该使用npm unlink aaa
删除符号链接
npm login
登录npm账号,你只要在npm官网注册一个账号,然后根据提示输入用户名和密码登录即可,只有登录了npm的账号才能发布npm模块。
npm publish
命令
$ npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
Publishes '.' if no argument supplied
Sets tag 'latest' if no --tag specified
npm publish
用于发布你自己开发的模块。
最常用的场景是:
- 使用
npm login
登录npm账号; - cd到要发布模块的根目录下(包含
package.json
的文件夹); - 执行
npm publish
。 这样,一个模块就发布到npm上去了,你可以登录npm官网去查看你发布的模块。 > 上面提到的这种场景,会自动为你发布的模块打上两个标签,一个是版本号,由package.json
文件的version
字段决定,用于版本管理;另一个是latest
标签,npm publish后面的可选参数--tag <tag>
的默认值就是**latest
**,tag
可以理解为辨识度更高的版本标记。
Note:
如果你npm设置了其他镜像作为源地址,在版本发布的时候要先设置为官网的地址!
$ npm config set registry=http://registry.npmjs.org
npm unpublish
命令
$ npm unpublish [<@scope>/]<pkg>[@<version>]
当你发布的某一个版本的module有较大的问题,你就可以用 npm unpublish这个命令的删除之前发布的版本。 npm官网不建议使用该命令来取消某一个版本的发布,并且你只能在发布该版本的24小时之内取消发布,超过了这个24小时,你需要联系npm的技术支持( support@npmjs.com)来解决。 </public|restricted>