npm 使用详解

2019-12-05 web

NPM

NPM 是 Node 的模块管理和发布工具,类似于 Python 的 setuptools,一些常见的工具,例如 grunt、bower 等工具都是通过 NPM 发布的,NPM 默认包含在 NodeJS 的安装包中,其中 npx 是 npm v5.2.0 引入的命令,所以这里直接安装 NodeJS 包。

详细可以查看官网 www.npmjs.com,也可以从 npm.taobao.org 上下载最新安装包,直接下载二进制安装包解压即可。

安装配置

使用默认的镜像源时,可能会导致不稳定,可以通过如下两种方式指定源,如下是淘宝的。

----- 1. 临时指定镜像源
$ npm install --registry http://registry.npm.taobao.org express

----- 2. 永久设置,并查看是否已经修改
$ npm config set registry http://registry.npm.taobao.org
$ npm config get registry

NPM 安装分为本地安装和全局安装两种,区别在于是否使用 -g 参数。

$ npm info grunt-cli              ← 查看版本、依赖等信息

# npm install -g grunt-cli        ← 全局安装客户端
$ npm install grunt               ← 安装本项目的目录下
$ npm install grunt@1.2.3         ← 安装指定版本
$ npm install grunt --save        ← 安装本项目的目录下,同时保存在package文件中
$ npm install grunt --save-dev    ← 安装本项目的目录下,同时保存在package文件中
# npm uninstall -g <package>      ← 删除全局包

$ npm list grunt                  ← 查看grunt版本信息,也可以使用 ls
$ npm list --depth=0              ← 仅查看本地直接安装包
$ npm list --depth=0 -global      ← 仅查看全局直接依赖

$ npm config set prefix "PATH"    ← 设置全局路径
$ npm config get prefix           ← 获取当前设置的目录,也就是包的安装路径

全局会安装到 /usr/lib/node_modules 目录下,本地则会安装到 node_modules 目录下,而一些二进制文件,例如 lite-server 包,通常同时会在 /usr/bin 目录下安装一个二进制文件。

不同 OS 发行版本的全局安装路径会有所区别,可以通过 npm config ls 或者 npm config get prefix 命令查看,有些包 (例如 typescript) 会包含可执行文件,就需要在 PATH 环境变量中添加对应 bin 路径。

package.json

包的定义和 NPM 都围绕着 package.json 文件做文章,用于存放模块的名称、版本、作者、模块入口、依赖项等信息,可以通过 npm help json 查看帮助文档,详细可查看 docs.npmjs.com

可以通过 npm init 交互式初始化项目,会生成一个 package.json 文件,一个 node package 有两种依赖,分别是:A) dependencies,是正常运行该包时所需要的依赖项;B) devDependencies,开发的时候需要的依赖项,像一些进行单元测试之类的包。

{
    "name": "foobar-demo",   # 模块名称
    "version": "1.0.0",      # 版本号,通常是Major.Minor.Patch
    "description": "Hello World",

    "scripts": {
        "product": "webpack",
        "dev": "webpack"
        "start": "exec-bin ls /"  # 执行命令
    },

    "dependencies": {
        "jquery": "^3.1.0"
    },
    "devDependencies": {
        "clean-webpack-plugin": "^0.1.10",
        "copy-webpack-plugin": "^3.0.1",
        "css-loader": "^0.23.1",
        "extract-text-webpack-plugin": "^1.0.1",
        "less": "^2.7.1",
        "less-loader": "^2.2.3",
        "style-loader": "^0.13.1",
        "webpack": "^1.13.1",
        "webpack-merge": "^0.14.1"
    }
}

在定义版本号的时候,有如下的匹配方式:

1.1.1        精确下载安装1.1.1版本的包
>,=1.1.1     大于、小于等于、大于等于1.1.1版本的包
1.0.1-1.1.1  版本范围是包含1.0.1到1.1.1版本的包
~1.1.1       尽量采用靠近1.1.1版本的包,可用版本1.1.1-0到1.1.x-x
~1.1         下载安装1.1.x-x版本的包
~1           下载安装1.x.x-x版本的包

其它

$ npm ls --depth 0         当前项目的依赖模块
$ npm ls -g --depth 0      全局模块

----- 可以通过如下方式分别安装。
$ npm install --production
$ npm install --dev