package.json 字段意义

常规字段

name

包名

version

版本名,semver
cheatsheet: https://devhints.io/semver

符号 含义 举例
~ 锁minor版本 ~1.2.3 is >=1.2.3 <1.3.0
^ 锁第一个非0版本 ^0.2.3 is >=0.2.3 <0.3.0

description

简介

keywords

关键词,用于方便搜索

homepage

官网链接

bugs

反馈bug的方式

license

开源许可

files

npm 安装时被包含下载的文件,不设置则为 [*] 包含所有文件。

.npmignore.gitignore 可实现相同功能,优先级 package.json#files > .npmignore > .gitignore

repository

项目仓库地址相关

重要字段

main

Node CommonJs 规范的模块入口

module

原本ESM规范的模块入口?

Node 没有采纳的「定义 ESM 入口的字段」提案,npm 与 Node 的文档中并没有标注这个字段

实际上是社区打包方案支持了该字段,约等于 main 字段。

browser

浏览器环境的模块入口

1
2
3
4
5
6
7
8
9
10
11
{
"browser": "./index.browser.js"
}

// or
{
"browser": {
"./index.js": "./index.browser.js",
"./index.mjs": "./index.browser.esm.js"
}
}

type

配置 Node 对待 js 文件的模块处理方式,如果 "type": "module" 则认为用 ES module 规范处理该文件,如果 "type": "commonjs" 则用CommonJs 规范处理该文件

export

Node 提案, main 字段的替代

可以提供子路径入口、条件判断入口

新版本中 Node 推荐使用该字段

bin

配置可执行命令的名称和实际执行程序路径

安装npm 包时,会建立一个symlink

scripts

内置脚本命令配置

dependencies

运行依赖

支持:

  • semver
  • URLs
  • git URL
  • GitHub URLs
  • Local Paths

devDependencies

开发环境依赖

peerDependencies

同伴依赖,不会被自动安装,通常用于表示与另一个包的依赖与兼容性关系来警示使用者

overrides

重写项目依赖的依赖,及其依赖树下某个依赖的版本号,进行包的替换

workspaces

工作区配置,用于在本地的根目录下管理多个子项目

可以自动地在 npm install 时将 workspaces 下面的包,软链到根目录的 node_modules 中

次要字段

man

帮助命令 man  文档

bundleDependencies

打包依赖。它的值是一个数组,在发布包时,bundleDependencies 里面的依赖都会被一起打包

optionalDependencies

可选依赖,不影响安装依赖的成功

engines

对 Node 或 包管理 的版本要求

os

系统要求

private

私有项目

publishConfig

npm 包发布时使用的配置

参考

https://github.com/stereobooster/package.json