NPM

参考:

介绍

NPM 是随同 node.js 一起安装的包管理工具,能解决 node.js 代码部署上的很多问题。

常见的使用场景有以下几种:

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

通过查看版本信息,检测是否安装:

1
npm -v

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

1
sudo npm install npm -g

命令行使用方式

本地安装

express 为例,安装方式为:

1
npm install express

这种安装方式:

  1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  2. 可以通过 require() 来引入本地安装的包。

全局安装

express 为例,安装方式为:

1
npm install express -g

这种安装方式:

  1. 将安装包放在 /usr/local 下或者你 node 的安装目录。
  2. 可以直接在命令行里使用。

链接

npm link 用来在本地项目和本地 npm 模块之间建立连接,可以在本地进行模块测试:

  1. 项目和模块在同一个目录下,可以使用相对路径

    1
    
    npm link ../module
    
  2. 项目和模块不在同一个目录下:

    1
    2
    3
    
    cd module && npm link # 进行全局link
    
    cd project && npm link <Module Name> # 模块名指 package.json 中的 name
    
  3. 解除 link:

    1
    2
    3
    4
    5
    
    # 解除项目和模块 link
    cd project && npm unlink <Module Name>
    
    # 解除模块全局 link
    cd module && npm unlink <Module Name>
    

如果你希望兼具本地安装、全局安装的功能,则需要在两个地方安装它或使用 npm link

查看安装信息

你可以用以下的命令查看所有全局安装的模块:

1
npm list -g

如果要查看某个模块的版本号,可以使用命令如下:

1
npm list <Module Name>

卸载模块

我们可以使用以下命令来卸载 Node.js 模块。

1
npm uninstall express

卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:

1
npm ls

更新模块

我们可以使用以下命令更新模块:

1
npm update express

把当前目录下 node_modules 子目录里边的对应模块更新至最新版本:

1
npm update

把全局安装的对应命令行程序更新至最新版:

1
npm update  -g

创建模块

创建模块,package.json 文件是必不可少的。

我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。

1
npm init

以上的命令会要求输入信息,需要根据个人的情况输入。在最后输入 “yes” 后会生成 package.json 文件。

接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):

1
npm adduser

接下来我们就用以下命令来发布模块:

1
npm publish

其他常用命令

除了本章介绍的部分外,NPM还提供了很多功能,package.json 里也有很多其它有用的字段。详细可以参考官方文档:npmjs.org/doc/

这里再介绍一些NPM常用命令。

  • 使用 查看某条命令的详细帮助,例如 install

    1
    
    npm help install
    
  • package.json 所在目录下使用:

    1
    
    npm install . -g
    

    可先在本地安装当前命令行程序,可用于发布前的本地测试。

  • 清空 NPM 本地缓存,用于对付使用相同版本号发布新版本代码的人:

    1
    
    npm cache clear
    
  • 撤销发布自己发布过的某个版本代码:

    1
    
    npm unpublish @
    
  • 使用以下来搜索模块:

1
npm search express

补充

版本号

使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。

语义版本号分为 X.Y.Z 三位,分别代表主版本号、次版本号和补丁版本号。

当代码变更时,版本号按以下原则更新:

  • 如果只是修复 bug,需要更新 Z 位。
  • 如果是新增了功能,但是向下兼容,需要更新 Y 位。
  • 如果有大变动,向下不兼容,需要更新 X 位。

版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。

使用淘宝 NPM 镜像

大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。

淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

这样就可以使用 cnpm 命令来安装模块了:

1
cnpm install [name]

更多信息可以查阅:http://npm.taobao.org/。