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_moudles 目录直接使用第三方包名加载模块。此外,定义了package.json 之后,node-echo 目录也可被当作一个包来使用。

NPM (NPM 中文文档:https://www.npmjs.cn/)

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,注册之后按照提示做即可,或者在NPM 官网进行。账号搞定后,接着我们需要编辑 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 发布代码了。

注意:

  • 项目名称以 package.json 中的 name 为准,与项目根目录文件夹名称无关

  • 登录之前要将 npm origin 切换到 npm 官方服务器 https://registry.npmjs.org/

  • 然后使用 npm login 命令登录 npm 账号,按步骤填写用户名、密码、邮箱即可

  • 最后在项目根目录下执行发布命令 npm publish ,执行完成即可在npm 官网上查找到相应包

    • 要注意项目名不能和 NPM 官网以有项目重名

    • 尽量不要发布没有意义的包,练习时发布的包最好再删除掉

  • 使用 npm unpublish 包名 --force 删除已上传的包

    • npm unpublish 命令只能删除 72 小时以内发布的包

npm 常用命令

除了本章介绍的部分外,NPM 还提供了很多功能,package.json 里也有很多其它有用的字段。除了可以在 https://docs.npmjs.com/cli/v6/commands 查看官方文档外,这里再介绍一些 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属性中。

    上面出现的 npm install 都可以用 npm i 这种简写方式代替

  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:清理本地npm 包缓存。

    注意:一个模块安装以后,本地其实保存了两份。一份是 ~/.npm 目录下的压缩包,另一份是 node_modules 目录下解压后的代码。但是,运行 npm install 的时候,只会检查 node_modules 目录,而不会检查 ~/.npm 目录。如果一个模块在 ~./npm 下有压缩包,但是没有安装在 node_modules 目录中,npm 依然会从远程仓库下载一次新的压缩包。

  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
      
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值