Node|npm使用方法及常用命令


npm使用方法及常用命令

    • 工程目录
    • npm ([NPM中文文档](https://www.npmjs.cn/))
      • 下载第三方包
      • 安装命令行程序
      • 发布代码
      • npm 常用命令
      • npm 使用淘宝镜像

工程目录 以编写一个命令行程序为例,一般我们会同时提供命令行模式和 API 模式两种使用方式,并且我们会借助第第三方包来编写代码。除了代码外,一个完整的程序也应该有自己的文档和测试用例。因此,一个标准的工程目录都看起来像下边这样。
- /home/user/workspace/node-echo/# 工程目录- bin/# 存放命令行相关代码node-echo+ doc/# 存放文档- lib/# 存放API相关代码echo.js- node_modules/# 存放第三方包+ argv/+ tests/# 存放测试用例package.json# 元数据文件README.md# 说明文件

其中部分文件内容如下:
/* bin/node-echo */var argv = require('argv'),echo = require('../lib/echo'); console.log(echo(argv.join(' '))); /* lib/echo.js */module.exports = function (message) {return message; }; /* package.json */{"name": "node-echo","main": "./lib/echo.js"}

【Node|npm使用方法及常用命令】以上例子中分类存放了不同类型的文件,并通过 node_moudles 目录直接使用第三方包名加载模块。此外,定义了package.json 之后,node-echo 目录也可被当作一个包来使用。
npm (NPM中文文档) NPM 是随同 Node 一起安装的包管理工具,能解决 node.js 代码部署上的很多问题,常见的使用场景有以下几种:
  • 允许用户从 NPM 服务器下载别人编写的第三方包到本地使用。
  • 允许用户从 NPM 服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。
    可以看到,NPM 建立了一个 NodeJS 生态圈,NodeJS 开发者和用户可以在里边互通有无。以下分别介绍这三种场景下怎样使用 NPM。
下载第三方包
需要使用第三方包时,首先得知道有哪些包可用。虽然 npmjs.org 提供了个搜索框可以根据包名来搜索,但如果连想使用的第三方包的名字都不确定的话,就请百度一下吧。知道了包名后,比如上边例子中的 argv,就可以在工程目录下打开终端,使用npm install argv命令来下载argv。
版本号:argv@0.0.2 存放目录:node_modules\argv

下载好之后,argv 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require(‘argv’)的方式就好,无需指定第三方包路径。
以上命令默认下载最新版第三方包,如果想要下载指定版本的话,可以在包名后边加上@,例如通过npm install argv@0.0.1命令可下载 0.0.1 版的 argv。
版本号:argv@0.0.1 存放目录:node_modules\argv

如果使用到的第三方包比较多,在工程目录下一个包一条命令地安装未免太过繁琐。因此 NPM 对 package.json 的字段做了扩展,允许在其中申明第三方包依赖。因此,上边例子中的 package.json 可以改写如下:
{"name": "node-echo","main": "./lib/echo.js","dependencies": {"argv": "0.0.2"}}

这样处理后,在工程目录下就可以使用 npm install 命令批量安装第三方包了。更重要的是,当以后 node-echo 也上传到了 NPM 服务器,别人下载这个包时,NPM 会根据包中申明的第三方包依赖自动下载进一步依赖的第三方包。例如,使用 npm install node-echo 命令时,NPM 会自动创建以下目录结构。
- project/- node_modules/- node-echo/- node_modules/+ argv/......

如此一来,用户只需关心自己直接使用的第三方包,不需要自己去解决所有包的依赖关系。
安装命令行程序
从 NPM 服务上下载安装一个命令行程序的方法与第三方包类似。例如上例中的 node-echo 提供了命令行使用方式,只要 node-echo 自己配置好了相关的 package.json 字段,对于用户而言,只需要使用 npm install node-echo -g命令安装程序。
参数中的 -g 表示全局安装,一般命令行程序都使用全局安装
如果使用全局安装, node-echo 会默认安装到以下位置,并且 NPM 会自动创建好 Linux 系统下需要的软链文件或 Windows 系统下需要的.cmd文件。
- /usr/local/# Linux系统下- lib/node_modules/+ node-echo/...- bin/node-echo...... - %APPDATA%\npm\# Windows系统下- node_modules\+ node-echo\...node-echo.cmd...

发布代码
第一次使用 NPM 发布代码前需要注册一个账号。终端下运行 npm adduser,之后按照提示做即可。账号搞定后,接着我们需要编辑 package.json 文件,加入 NPM 必需的字段。接着上边 node-echo 的例子,package.json 里必要的字段如下。
{"name": "node-echo",# 包名,在NPM服务器上须要保持唯一"version": "1.0.0",# 当前版本号"dependencies": {# 第三方包依赖,需要指定包名和版本号"argv": "0.0.2"},"main": "./lib/echo.js",# 入口模块位置"bin" : {"node-echo": "./bin/node-echo"# 命令行程序名和主模块位置}}

之后,我们就可以在 package.json 所在目录下运行 npm publish 发布代码了。
npm 常用命令
除了本章介绍的部分外,NPM 还提供了很多功能,package.json 里也有很多其它有用的字段。除了可以在 npmjs.org/doc/ 查看官方文档外,这里再介绍一些 NPM 常用命令。
  1. npm -v: 查看npm版本
  2. npm init [-y]: 初始化后会出现一个package.json配置文件。可以在后面加上-y ,快速跳过问答式界面。
  3. npm install:会根据项目中的package.json文件自动下载项目所需的全部依赖。
  4. npm install 包名 --save-dev (npm install 包名 -D):安装的包只用于开发环境,不用于生产环境,会出现在package.json文件中的devDependencies属性中。
  5. npm install 包名 --save(npm install 包名 -S):安装的包需要发布到生产环境的,会出现在package.json文件中的dependencies属性中。
  6. npm list:查看当前目录下已安装的node包。
  7. npm list -g:查看全局已经安装过的node包。
  8. npm help [命令]:查看npm所有命令,也可以查看指定命令用法。
  9. npm update [包名]:可以把当前目录下 node_modules 子目录里边的对应模块更新至最新版本,加上包名表示只更新这个包。
  10. npm update [包名] -g:可以把所有全局安装的对应命令行程序更新至最新版,加上包名表示只更新这个包。
  11. npm uninstall 包名:卸载指定包。
  12. npm config list:查看配置信息。
  13. npm 指定命令 --help:查看指定命令的帮助。
  14. npm info 指定包名:查看远程npm上指定包的所有版本信息。
  15. npm config set registry https://registry.npm.taobao.org: 修改包下载源,此例修改为了淘宝镜像。
  16. npm install -g nrm: 可以通过nrm管理镜像地址
    • nrm ls: 查看nrm有哪些可用镜像
    • nrm use taobo: 切换到淘宝镜像
  17. npm root:查看当前包的安装路径。
  18. npm root -g:查看全局的包的安装路径。
  19. npm ls [包名]:查看本地安装的指定包及版本信息,没有显示empty。
  20. npm ls [包名] -g:查看全局安装的指定包及版本信息,没有显示empty。
  21. npm cache clear
  22. npm install . -g:在 package.json 所在目录下使用,可先在本地安装当前命令行程序,可用于发布前的本地测试。
  23. npm cache clear:清空 NPM 本地缓存,用于对付使用相同版本号发布新版本代码的人。
  24. npm unpublish @:撤销发布自己发布过的某个版本代码。
npm 使用淘宝镜像
国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝NPM镜像(淘宝npm地址)。
  • 临时使用
    npm --registry https://registry.npm.taobao.org install express

  • 持久使用
    npm config set registry https://registry.npm.taobao.org

  • 配置后可通过下面方式来验证是否成功
    npm config get registry 或 npm info express

  • 通过cnpm使用
    npm install -g cnpm --registry=https://registry.npm.taobao.org

    • 使用方法:
      cnpm install express
  • 使用 nrm 管理 registry 地址
    • 下载 nrm 命令行工具
      npm install -g nrm
    • 使用方法:
      nrm ls:查看 nrm 有哪些可用镜像(星号表示当前使用的镜像)
      * npm -------- https://registry.npmjs.org/ yarn ------- https://registry.yarnpkg.com/ cnpm ------- http://r.cnpmjs.org/ taobao ----- https://registry.npm.taobao.org/ nj --------- https://registry.nodejitsu.com/ npmMirror -- https://skimdb.npmjs.com/registry/ edunpm ----- http://registry.enpmjs.org/

      nrm use taobo:切换到淘宝镜像
      Registry has been set to: https://registry.npm.taobao.org/

      nrm test taobao:测试镜像速度
      * taobao - 247ms

    推荐阅读