重要字段
在package.json中最重要的两个字段是name(包名)和version(版本号),没有它们,npm包将无法安装,name和version字段一起用于创建唯一的ID
{
"name":"my-package",//它在URL中使用作为参数命令行,以及node_modules中的目录名
"version":"1.0.0"
}
规则
- 必须小于或等于214个字符(包括@scop/for范围包)
- 不能以点(.)或下划线(_)开头
- 名称中不得包含大写字母
- 必须仅使用URL安全字符
信息类字段
description
Description 是对包的描述,包管理器也会把这个字符作为搜索关键词
{
    "description":"描述"
}
keywords
关键字为一个数组,用于包管理器搜索
{
    "keyword":["antd","react"]
}
license
所有包都应该指定许可证,以便让用户了解他们是在什么授权下使用此包,以及此包有哪些限制。
{
    "license": "MIT",
  "license": "(MIT or GPL-3.0)",
  "license": "SEE LICENSE IN LICENSE_FILENAME.txt",
  "license": "UNLICENSED"
}
鼓励使用开源 (OSI-approved) 许可证,除非你有特别的原因不用它。 如果你开发的包是你工作的一部分,最好和公司讨论后再做决定。
license字段必须是以下之一:
- 如果你使用标准的许可证,需要一个有效地 SPDX 许可证标识。
- 如果你用多种标准许可证,需要有效的 SPDX 许可证表达式2.0语法表达式。
- 如果你使用非标准的许可证,一个 SEE LICENSE IN <文件名>字符串指向你的包里顶级目录的一个 <文件名>。
- 如果你不想在任何条款下授权其他人使用你的私有或未公开的包,一个 UNLICENSED字符串。
链接类字段
各种指向项目文档,issues上报,等等链接字段
homepage
是包的项目主页或者文档首页。
{
  "homepage": "https://www.yuque.com/xepkov"
}
bugs
问题反馈系统的URL,或者是email地址之类的链接,用户通过该途径向你反馈问题
{
  "bugs": "2196064304@qq.com"
}
repository
代码托管的位置
{
    "repository": { "type": "git", "url": "https://github.com/wct123456/father" },
}
项目维护类字段
author
项目维护者
{
  "author": { "name": "Your Name", "email": "you@example.com", "url": "http://your-website.com" },
}
constributors
贡献者
{
  "contributors": [
    { "name": "Your Friend", "email": "friend@example.com", "url": "http://friends-website.com" }
    { "name": "Other Friend", "email": "other@example.com", "url": "http://other-website.com" }
  ],
}
文件类信息
files
指定包含在项目中的文件,以及项目的入口文件
{
  "files": [
    "filename.js",
    "dist",
    "glob/*.{js,json}"
  ]
}
项目包含的文件,可以是单独的文件、整个文件夹,或者通配符匹配到的文件。
main
项目的入口文件
{
    "main":"index.js"
}
bin
随着项目一起被安装的可执行文件
{
  "bin": "bin.js",
  "bin": {
    "命令名称": "bin/命令路径/命令名称.js",
    "other-command": "bin/other-command"
  }
}
man
项目的入口文件
{
  "man": "./man/doc.1",
  "man": ["./man/doc.1", "./man/doc.2"]
}
directories
{
  "directories": {
    "lib": "path/to/lib/",
    "bin": "path/to/bin/",
    "man": "path/to/man/",
    "doc": "path/to/doc/",
    "example": "path/to/example/"
  }
}
当你的包安装时,你可以指定确切的位置来放二进制文件、man pages、文档、例子等。
types
这是一个只在 TypeScript 中生效的字段,如果您的包有一个 main.js 文件,您还需要在package.json 文件中指明主声明文件。 将 types 属性设置为指向 bundled 的声明文件。 例如:
{
  "types": "./lib/main.d.ts",
}
如果您的主声明文件名为 index.d.ts 并且位于包的根目录(index.js旁边),则不需要标记 types 属性,建议这样做。
打包/包字段
module
pkg.module 将指向具有 ES2015 模块语法的模块,但仅指向目标环境支持的语法功能。 完整的描述在这里。
支持:rollup, webpack
browser
字段由模块作者提供,作为 JavaScript 包或组件工具的提示,用于打包模块以供客户端使用。 提案就在这里。
esnext
- esnext:ES模块中使用阶段4功能(或更旧版本)的源代码,未编译。
- main:指向一个CommonJS模块(或UMD模块),其- JavaScript与- Node.js当前可以处理的一样现代。
- 大多数 module用例应该可以通过esnext处理。
- browser可以通过- esnext的扩展版本来处理
{
  "main": "main.js",
  "esnext": {
    "main": "main-esnext.js",
    "browser": "browser-specific-main-esnext.js"
  }
}
另请参阅:Delivering untranspiled source code via npm
任务类字段
scripts
{
  "scripts": {
    "start": "umi dev",
    "build": "umi build",
  }
}
scripts 字段里定义的脚本,可以通过 yarn run <script> 命令来执行。
参考文档:npm docs
特定的 scripts
对于以下脚本,npm 支持 package.json 文件的 scripts 默认命令字段:
- prepublish: 在打包并发布包之前运行,以及在没有任何参数的本地- npm安装之前运行。 (见下文)
- prepare: 在打包和发布包之前运行,在没有任何参数的本地- npm install上运行,以及安装 git 依赖项时(见下文)。 这是在- preublish之后运行,但是在- preublishOnly之前运行。
- prepublishOnly: 在包准备和打包之前运行,仅限于npm发布。 (见下文。)
- prepack: 在打包- tarball之前运行(在- npm pack,- npm publish,以及安装 git 依赖项时)
- postpack: 在生成- tarball之后运行并移动到其最终目标。
- publish,- postpublish: 在包发布后运行。
- preinstall: 在安装软件包之前运行。
- install,- postinstall: 安装包后运行。
- preuninstall,- uninstall: 在卸载软件包之前运行。
- postuninstall: 在卸载软件包之后运行。
- preversion: 在改变包版本之前运行。
- version: 改变包版本后运行,但提交之前。
- postversion: 改变包版本后运行,然后提交。
- pretest,- test,- posttest: 由- npm test命令运行。
- prestop,- stop,- poststop: 由- npm stop命令运行。
- prestart,- start,- poststart: 由- npm start命令运行。
- prerestart,- restart,- postrestart: 由- npm restart命令运行。 注意:如果没有提供重启脚本,- npm ``restart将运行- stop和- start脚本。
- preshrinkwrap,- shrinkwrap,- postshrinkwrap: 由- npm shrinkwrap命令运行。
参考文档:npm docs.
config
配置你的脚本的选项或参数
{
  "config": {
    "port": "8080"
  }
}
依赖描述类字段
你的包很可能依赖其他包。你可以在你的 package.json 文件里指定那些依赖。
dependencies
这些是你的包的开发版和发布版都需要的依赖。
{
  "dependencies": {
    "package-1": "^3.1.4",
    "package-2": "file:./path/to/dir"
  }
}
你可以指定一个确切的版本、一个最小的版本 (比如 >=) 或者一个版本范围 (比如 >= … <)。
包也可以指向本地的一个目录文件夹。
devDependencies
这些是只在你的包开发期间需要,但是生产环境不会被安装的包。
{
  "devDependencies": {
    "package-2": "^0.4.2"
  }
}
peerDependencies
平行依赖允许你说明你的包和其他包版本的兼容性。
{
  "peerDependencies": {
    "package-3": "^2.7.18"
  }
}
optionalDependcies
可选依赖可以用于你的包,但不是必需的。如果可选包没有找到,安装还可以继续。
{
  "optionalDependencies": {
    "package-5": "^1.6.1"
  }
}
boundledDependencies
打包依赖是发布你的包时将会一起打包的一个包名数组;
{
    "boundledDependencies":[
      "package-4",
  ]
}
系统
engines
指定使用你的包客户必须使用的版本,这将检查 process.versions 以及当前 yarn 版本。
{
  "engines": {
    "node": ">=4.4.7 <7.0.0",
    "zlib": "^1.2.8",
    "yarn": "^0.14.0"
  }
}
此检查遵守正常的 semver 规则,但有一个例外。 它允许预发布版本匹配未明确指定预发布的 semver。 例如,1.4.0-rc.0 匹配 >=1.3.0,但它与典型的 semver 检查不匹配。
os
此选项指定你的包的操作系统兼容性,它会检查 process.platform。
{
  "os": ["darwin", "linux"],
  "os": ["!win32"]
}
cpu
使用这个选项指定你的包将只能在某些 CPU 体系架构上运行,这会检查 process.arch。
{
  "cpu": ["x64", "ia32"],
  "cpu": ["!arm", "!mips"]
}
发布
priavate
如果你不想你的包发布到包管理器(npm 或者 私有包管理),设置为 true。
{
  "private": true
}
publishConfig
这些配置值将在你的包发布时使用。比如,你可以给包打标签。
{
  "publishConfig": {
    "registry": "https://registry.npm.taobao.org"
  }
}
这是一组将在发布时使用的配置值。 如果要设置标记,注册表或访问权限,则特别方便,以便确保给定的包未标记为 latest,发布到全局公共 registry 或默认情况下,作用域模块(@scoped)是私有的。
可以覆盖任何配置值,但只有 tag,registry 和 access 可能对于发布而言很重要,npm-config。
Yarn
flat
如果你的包只允许给定依赖的一个版本,你想强制和命令行上 yarn install —flat 相同的行为,把这个值设为 true。
{
  "flat": true
}
请注意,如果你的 package.json 包含 "flat": true 并且其它包依赖你的包 (比如你在构建一个库,而不是应用), 其它那些包也需要在它们的 package.json 加上 "flat": true,或者在命令行上用 yarn install --flat 安装。
resolutions
{
  "resolutions": {
    "transitive-package-1": "0.0.29",
    "transitive-package-2": "file:./local-forks/transitive-package-2",
    "dependencies-package-1/transitive-package-3": "^2.1.1"
  }
}
允许您覆盖特定嵌套依赖项的版本。 有关完整规范,请参见选择性版本解析 RFC。
注意,yarn install --flat 命令将会自动在 package.json 文件里加入 resolutions 字段。
参考文档: package.json
 
 
                         
                                

