NPM学习笔记
npm 是世界上最大的软件注册表。来自各大洲的开源开发人员都使用 npm 来共享和借用包,许多组织也使用 npm 来管理私有开发。
常用命令
1 | npm login # 登录 |
设置代理
1 | npm config set proxy http://username:password@server:port |
关于 Https
经过上面设置使用了 http 开头的源,因此不需要设 https_proxy 了,否则还要增加一句:
1 | npm config set https-proxy http://username:password@server:port |
取消代理
1 | npm config delete proxy |
运行脚本
调用 package.json 的参数
1 | { |
传递参数
1 | { |
Adding the -- --fix
option is like executing xo --fix
.
前脚本后脚本
1 | { |
在此示例 npm run test 中,将按所述执行这些脚本。
与 pnpm 不同,pnpm 不会执行前后脚本,参考 https://pnpm.io/zh/cli/run#%E4%B8%8E-npm-run%E7%9A%84%E4%B8%8D%E5%90%8C%E4%B9%8B%E5%A4%84
生命周期
参考 https://docs.npmjs.com/cli/v10/using-npm/scripts#life-cycle-operation-order
更新 NPM 版本
1 | npm install -g npm@latest |
设置 init 命令的配置选项
1 | npm set init-author-email "example-user@example.com" |
指定 dependencies 和 devDependencies
1 | 指定 dependencies |
重启
1 | npm restart |
如果当前项目具有 中 package.json 指定的脚本,则将运行以下 “restart” 脚本:
- prerestart
- restart
- postrestart
如果它没有指定脚本 “restart” ,但它确实有 stop and/或 start 脚本,则将运行以下脚本:
- prerestart
- prestop
- stop
- poststop
- prestart
- start
- poststart
- postrestart
npmrc
npm 从命令行、环境变量和 npmrc
文件中获取其配置设置。
每个项目的配置文件
在项目中本地工作时,项目根目录中 .npmrc
的文件(即 node_modules
和 package.json
的同级)将设置特定于此项目的配置值。
请注意,这仅适用于运行 npm 的项目的根目录。当您的模块发布时,它不起作用。例如,您不能发布强制自身全局安装或安装在其他位置的模块。
此外,在全局模式下不会读取此文件,例如在运行 npm install -g
时。
每个工作区配置文件
pnpm 的特性,包含 pnpm-workspace.yaml 文件的目录。
每用户配置文件
$HOME/.npmrc
(或 userconfig
参数,如果在环境或命令行中设置)。
全局配置文件
$PREFIX/etc/npmrc
(或 globalconfig
参数,如果在环境或命令行中设置)。
环境变量
npm_config_
前缀的环境变量将覆盖 npmrc
文件中的任何设置。
命令行选项
npm config set
命令将覆盖 npmrc
文件中的任何设置。
cnpm
store-dir
所有包被保存在磁盘上的位置。
1 | npm config set store-dir ~/.pnpm-store |
- 默认值:
- If the $PNPM_HOME env variable is set, then $PNPM_HOME/store
- 如果设置了 $XDG_DATA_HOME 环境变量,则为 $XDG_DATA_HOME/pnpm/store
- 在 Windows 上: ~/AppData/Local/pnpm/store
- 在 macOS 上: ~/Library/pnpm/store
- 在 Linux 上: ~/.local/share/pnpm/store
- 类型:path
package.json
name
- 名称必须小于或等于 214 个字符。这包括作用域包的作用域。
- 作用域包的名称可以以点或下划线开头。如果没有范围,这是不允许的。
- 新包的名称中不得包含大写字母。
- 该名称最终成为 URL 的一部分、命令行上的参数和文件夹名称。因此,名称不能包含任何非 URL 安全字符。
- 不要使用与核心 Node 模块相同的名称。
- 不要在名称中加入“js”或“node”。
- 该名称可能会作为参数传递给 require(),因此它应该简短,但也具有合理的描述性。
- 在你过于依恋它之前,你可能想检查一下
https://www.npmjs.com
,看看是否已经有这个名字的东西。
version
1 | npm install semver |
files
可选。类似.gitignore
语法。
.npmignore
文件可以排除文件。
main
main 字段是一个模块 ID,它是程序的主要入口点。也就是说,如果您的软件包被命名为 foo ,并且用户安装了它,然后进行了 require("foo")
安装,则将返回主模块的导出对象。
如果 main
未设置,则默认位于 index.js
包的根文件夹中。
config
“config”对象可用于设置包脚本中使用的配置参数,这些参数在升级后保持不变。例如,如果一个包包含以下内容:
1 | { |
可以用 npm_package_config_port
引用。
engines
您可以指定您的内容所使用的 node 或 npm 版本:
1 | { |
除非用户设置了 engine-strict
配置标志,否则此字段仅是建议字段,并且仅在包作为依赖项安装时才会生成警告。
os
您可以指定模块将在哪些操作系统上运行:
1 |
|
主机操作系统由以下因素 process.platform
决定。
cpu
如果您的代码仅在某些 CPU 架构上运行,您可以指定哪些架构。
1 | { |
主机体系结构由以下因素 process.arch
决定
package-lock.json
package-lock.json
对于 npm 修改树或 node_modules
package.json
.它描述了生成的确切树,以便后续安装能够生成相同的树,而不考虑中间依赖项更新。
npm-shrinkwrap.json
区别在于 package-lock.json
无法发布,如果在根项目以外的任何地方找到它,它将被忽略。
相比之下,npm-shrinkwrap.json
允许发布,并从遇到的点定义依赖关系树。除非部署 CLI 工具或以其他方式使用发布过程来生成生产包,否则不建议这样做。
如果 和 npm-shrinkwrap.json
都 package-lock.json
存在于项目的根目录中, npm-shrinkwrap.json
则优先 package-lock.json 并被忽略。