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 [&lt;@scope&gt;/]<name>
$ npm install [&lt;@scope&gt;/]<name>@<tag>
$ npm install [&lt;@scope&gt;/]<name>@<version>
$ npm install [&lt;@scope&gt;/]<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 [&lt;@scope&gt;/]<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 [&lt;@scope&gt;/]<name>@<tag>

tag是在模块发布的时候给模块打的一个标签,其他开发者可以通过@不同的tag来安装打了相应tag的版本

  • npm install 命令根据安装环境的不同,有3个可选的参数可以加,这几个参数将在package.json中相应的key下面保存要安装的模块

    • -S, --save: 这个模块将作为dependencies的成员。

    • -D, --save-dev: 这个模块将作为devDependencies的成员。

    • -O, --save-optional: 这个模块将作为optionalDependencies的成员

  • $ npm install [&lt;@scope&gt;/]<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 [&lt;@scope&gt;/]<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 (in package dir)
$ npm link [&lt;@scope&gt;/]<pkg>[@<version>]

alias: npm ln

我们假设这样一个场景,你刚开发完一个模块A(模块的名称暂定为aaa),你准备做发布前的最后测试。

一种实现的方式是:

  1. cd到模块A的根目录下,执行 npm install -g,模块A就全局的安装到了你电脑上。
  2. 切换一个新的目录,使用npm init构建一个新的工程B,这时,你就可以用IDE打开index.js,通过require('aaa')来使用模块A了。

上面的实现方式有一个问题,当你在测试过程中发现模块A有bug或接口不合理的地方,你需要在模块A的源码上做对应的修改,但是,这个改动只有重新执行npm install -g之后才会生效(模块A的修改无法实时的更新到全局)。这就稍显麻烦了,是否有办法让模块A的改动及时反馈的全局呢?有的!

我们来介绍满足这个需求的另外一种实现方式:

  1. cd到模块A的根目录下,执行npm link,这时,在全局的npm模块仓库(node_modules)中,会创建一个指向模块A根目录的符号链接(symlink)
  2. 切换到工程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用于发布你自己开发的模块。 最常用的场景是:

  1. 使用npm login登录npm账号;
  2. cd到要发布模块的根目录下(包含package.json的文件夹);
  3. 执行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 [&lt;@scope&gt;/]<pkg>[@<version>]

当你发布的某一个版本的module有较大的问题,你就可以用 npm unpublish这个命令的删除之前发布的版本。 npm官网不建议使用该命令来取消某一个版本的发布,并且你只能在发布该版本的24小时之内取消发布,超过了这个24小时,你需要联系npm的技术支持( support@npmjs.com)来解决。 </public|restricted>

';