🗒️npm CLI 命令

1. 简介

npm 是 Node JavaScript 平台的 package manager。它将 modules 放在一块以便 node 可以找到它们,同时智能地管理着 dependency conflicts(依赖冲突)。

npm 具有极高的可配置性,以支持各种用例。最常见的是,用它来 publish, discover, install 和 develop node 程序。

npm search  # 在 public registry 中所有的可用内容
npm install # 安装
npm ls      # 显示已安装的

如果 package 的依赖项是用 git URL 列出的,那么 npm 会使用 git 命令来安装该依赖项,如果安装失败就会报错。

如果 npm 尝试安装的某个 package 是一个 native node module(本地 node 模块)并且需要编译 C++ 代码,那么 npm 会使用 node-gyp 来完成该任务。

1.1 安装模式

npm install           # 本地安装(默认),会在当前目录安装
npm install -g        # 全局安装
npm install --global
mode
packages 的安装位置
bins 的安装位置

local

./node_modules

./node_modules/.bin

global

$npm_config_prefix/lib/node_modules

$npm_config_prefix/bin

1.2 开发相关

使用 npm 来开发和发布代码,相关内容:

  • npm init:创建 package.json 文件

  • npm link:将 current working code 链接到 Node 的 path 中,就不必在每次更新内容时 reinstall

  • npm install:如果不需要符号链接,那就 install 好了。特别是从 registry 安装其他人的代码

  • adduser:创建一个帐户或登录,npm 会把 credentials(凭据)存储在 user config file 里

  • npm publish:将代码上传到 registry

1.3 配置

我们可以对 npm 进行配置,它会从以下 5 个地方读取其配置选项,按优先级排序:

  1. command line switches:--key val

  2. environment variables:环境变量中以 npm_config_ 为前缀的任何配置

    • 比如 export npm_config_key=val

  3. user configs:$HOME/.npmrc 文件是 ini 格式的配置列表

    • 该文件地址也可以通过 cli, env 来设置

  4. global configs:./etc/npmrc 文件

    • 该文件地址也可以通过 cli, env, user config 来设置

  5. defaults:lib/utils/config-defs.js 默认配置选项,这里面的值都不能修改

运行 npm config ls -l 命令,可查看 npm 内部的一组 configuration parameters。

更多 config settings 和 shorthands 详见 npm CLI / Using npm / Config

2. npm install

一些补充。

2.1 版本要求

如果要安装的 package 有 package-lock, npm shrinkwrap 文件, 或 yarn lock 文件,那么依赖项的安装就会按照那个来,遵循的优先顺序是:

  1. npm-shrinkwrap.json

  2. package-lock.json

  3. yarn.lock

2.2 常用选项

# 常用选项
--global
--save-dev  # -D
--save-prod # -P

2.3 配置参数

许多配置参数都和安装有关,毕竟这是 npm 所做的大部分工作。常见选项:

  1. save

  2. save-exact

  3. global

  4. install-strategy

  5. legacy-bundling

  6. global-style

  7. omit

  8. strict-peer-deps

  9. package-lock

  10. foreground-scripts

  11. ignore-scripts

  12. audit

  13. bin-links

  14. fund

  15. dry-run

  16. workspace

  17. workspaces

  18. include-workspace-root

  19. install-links

2.4 安装算法

eg1. A{B,C}, B{C}, C{D} 会生成

A
+-- B
+-- C
+-- D

eg2. A{B,C}, B{C,D@1}, C{D@2} 会生成

A
+-- B
+-- C
   -- D@2
+-- D@1

关于 npm 创建的特定文件夹结构,详见配置 folders

3. npm init

创建 package.json 文件。

npm init <package-spec>
npm init <@scope>

# 例子
npm init foo@latest
npm init foo@1.2.3

# 选项
--yes
--scope # 创建一个 scoped package
-w      # workspace

相关配置:

  1. yes

  2. force

  3. scope

  4. workspace 相关

    1. workspace

    2. workspaces

    3. workspaces-update

    4. include-workspace-root

4. npx

4.1 npx vs npm

  • npm, node package manager, node 包管理器

  • npx, node package execute, node 包执行器

npm 本身并不运行任何软件 package。如果要使用 npm 运行一个 package,则必须在 package.json 文件中指定这个 package。要用 npm 执行一个包时,可以:

# 方法一 输入本地路径
$ ./node_modules/.bin/your-package

# 方法二 运行脚本
$ npm run <your-package-script>

用普通的 npm 运行一个包比较繁琐。所以 npx 出现了。

4.2 npx 简介

从 npm 5.2.0 版以来,npx 就被预先捆绑在 npm 中了。

which npx
npm install -g npx # 若没有, 则安装

npx 命令是从 npm package 运行任意 command,不论是本地安装的 package 还是要从远程拉取的。运行的上下文和 npm run 命令的一样。要请求的 packages:

  1. 先检查 local project dependencies

  2. 若(1)没有,则会将 package 安装在 npm cache 的文件夹中

    • 该文件夹会被添加到 PATH 环境变量中,在执行过程中

尤其对那些以前没安装过的 package,有时只想用一下但并不想全局安装它们,就可以用 npx 了。

npx -- <pkg>[@<version>] [args...]
npx --package=<pkg>[@<version>] -- <cmd> [args...]
npx -c '<cmd> [args...]'
npx --package=foo -c '<cmd> [args...]'

--package 选项指定的任何 packages 都将在执行 command 的 PATH 中提供,以及任何本地安装的 package executables(可执行文件)。--package 选项可以指定多次,以执行提供的 command。

Last updated