🗒️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 --globallocal
./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 个地方读取其配置选项,按优先级排序:
- command line switches: - --key val
- environment variables:环境变量中以 - npm_config_为前缀的任何配置- 比如 - export npm_config_key=val
 
- user configs: - $HOME/.npmrc文件是 ini 格式的配置列表- 该文件地址也可以通过 cli, env 来设置 
 
- global configs: - ./etc/npmrc文件- 该文件地址也可以通过 cli, env, user config 来设置 
 
- defaults: - lib/utils/config-defs.js默认配置选项,这里面的值都不能修改
运行 npm config ls -l 命令,可查看 npm 内部的一组 configuration parameters。
更多 config settings 和 shorthands 详见 npm CLI / Using npm / Config。
2. npm install
npm install一些补充。
2.1 版本要求
如果要安装的 package 有 package-lock, npm shrinkwrap 文件, 或 yarn lock 文件,那么依赖项的安装就会按照那个来,遵循的优先顺序是:
- npm-shrinkwrap.json
- package-lock.json
- yarn.lock
2.2 常用选项
# 常用选项
--global
--save-dev  # -D
--save-prod # -P2.3 配置参数
许多配置参数都和安装有关,毕竟这是 npm 所做的大部分工作。常见选项:
- save
- save-exact
- global
- install-strategy
- legacy-bundling
- global-style
- omit
- strict-peer-deps
- package-lock
- foreground-scripts
- ignore-scripts
- audit
- bin-links
- fund
- dry-run
- workspace
- workspaces
- include-workspace-root
- install-links
2.4 安装算法
eg1. A{B,C}, B{C}, C{D} 会生成
A
+-- B
+-- C
+-- Deg2. A{B,C}, B{C,D@1}, C{D@2} 会生成
A
+-- B
+-- C
   -- D@2
+-- D@1关于 npm 创建的特定文件夹结构,详见配置 folders。
3. npm init
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相关配置:
- yes
- force
- scope
- workspace 相关 - workspace
- workspaces
- workspaces-update
- include-workspace-root
 
4. npx
npx4.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:
- 先检查 local project dependencies 
- 若(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