如果您想将此项目克隆到您的计算机上,请注意不要使用package.json
作为文件夹名称 - 它会破坏yarn
( An unexpected error occurred: "EISDIR: illegal operation on a directory, read".
)。
本文档的原始版本复制自yarnpkg。
另请参阅 npm 文档、std-pkg、clean-publish、package-json-validator、cosmiconfig、rc(作为 cosmiconfig 的对手方法)。
name
version
description
keywords
license
homepage
bugs
repository
author
contributors
files
main
bin
man
directories
scripts
scripts
config
dependencies
devDependencies
peerDependencies
optionalDependencies
bundledDependencies
engines
os
cpu
libc
private
publishConfig
flat
resolutions
workspaces
bolt
unpkg
types
flow:main
browserslist
module
browser
esnext
es2015
esm
module-browser
modules.root
jsnext:main
react-native
sideEffects
source
, umd:main
source
@std/esm
jspm
ignore
format
registry
shim
map
browserify.transform
proxy
homepage
babel
eslintConfig
jest
stylelint
size-limit
pwmetrics
ava
nyc
preferGlobal
style
less
standard
package.json
中最重要的两个字段是name
和version
,没有它们您的包将无法安装。 name
和version
字段一起使用来创建唯一的 ID。
name
{
"name" : " my-awesome-package "
}
这是您的包的名称。它在 URL 中使用,作为命令行上的参数,以及作为node_modules
内的目录名称。
yarn add [name]
node_modules/[name]
https://registry.npmjs.org/[name]/-/[name]-[version].tgz
规则
@scope/
)。.
) 或下划线 ( _
) 开头。尖端
js
或node
。require()
调用中使用。version
{
"version" : " 1.0.0 "
}
您的软件包的当前版本。
description
{
"description" : " My short description of my awesome package "
}
描述只是一个字符串,可以帮助人们理解包的用途。在包管理器中搜索包时也可以使用它。
keywords
{
"keywords" : [ " short " , " relevant " , " keywords " , " for " , " searching " ]
}
关键字是在包管理器中搜索包时有用的字符串数组。
license
{
"license" : " MIT " ,
"license" : " (MIT or GPL-3.0) " ,
"license" : " SEE LICENSE IN LICENSE_FILENAME.txt " ,
"license" : " UNLICENSED "
}
所有软件包都应指定许可证,以便用户知道如何允许他们使用它以及您对其施加的任何限制。
我们鼓励您使用开源(OSI 批准的)许可证,除非您有特定原因不这样做。如果您将构建软件包作为工作的一部分,那么最好在决定许可证之前咨询您的公司。
必须是以下之一:
SEE LICENSE IN <filename>
字符串指向软件包顶层的<filename>
。UNLICENSED
字符串。 各种文档链接、问题归档位置以及包代码实际所在的位置。
homepage
{
"homepage" : " https://your-package.org "
}
主页是您的包的登陆页面或文档的 URL。
也被 Create React App 使用
bugs
{
"bugs" : " https://github.com/user/repo/issues "
}
项目问题跟踪器的 URL。这也可以是电子邮件地址之类的东西。它为用户提供了一种查找将问题发送到何处的方法。
repository
{
"repository" : { "type" : " git " , "url" : " https://github.com/user/repo.git " },
"repository" : " github:user/repo " ,
"repository" : " gitlab:user/repo " ,
"repository" : " bitbucket:user/repo " ,
"repository" : " gist:a1b2c3d4e5f "
}
存储库是包的实际代码所在的位置。
您的项目的维护者。
author
{
"author" : { "name" : " Your Name " , "email" : " [email protected] " , "url" : " http://your-website.com " },
"author" : " Your Name <[email protected]> (http://your-website.com) "
}
包作者信息。作者是一个人。
contributors
{
"contributors" : [
{ "name" : " Your Friend " , "email" : " [email protected] " , "url" : " http://friends-website.com " }
{ "name" : " Other Friend " , "email" : " [email protected] " , "url" : " http://other-website.com " }
],
"contributors" : [
" Your Friend <[email protected]> (http://friends-website.com) " ,
" Other Friend <[email protected]> (http://other-website.com) "
]
}
那些为您的包裹做出贡献的人。贡献者是一群人。
您可以指定将包含在项目中的文件以及项目的主入口点。
files
{
"files" : [
" filename.js " ,
" directory/ " ,
" glob/*.{js,json} "
]
}
这些是包含在您的项目中的文件。您可以指定单个文件、整个目录或使用通配符来包含满足特定条件的文件。
main
{
"main" : " filename.js "
}
这是您的项目功能的主要入口点。
bin
{
"bin" : " bin.js " ,
"bin" : {
"command-name" : " bin/command-name.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/ "
}
}
安装包时,您可以指定放置二进制文件、手册页、文档、示例等的确切位置。
您的包可以包含可运行的脚本或其他配置。
scripts
{
"scripts" : {
"build-project" : " node build-project.js "
}
}
脚本是自动化与包相关的任务(例如简单的构建过程或开发工具)的好方法。使用"scripts"
字段,您可以定义要作为yarn run <script>
运行的各种脚本。例如,上面的build-project
脚本可以使用yarn run build-project
调用,并将运行node build-project.js
。
某些脚本名称很特殊。如果已定义,则在安装软件包之前,yarn 会调用preinstall
脚本。出于兼容性原因,名为install
、 postinstall
和prepublish
脚本都将在软件包安装完成后调用。
start
脚本值默认为node server.js
。
"scripts": {"start": "node server.js"}
。如果包的根目录中有 server.js 文件,则 npm 将默认启动命令为 node server.js。
"scripts":{"preinstall": "node-gyp rebuild"}
。如果你的包的根目录中有一个 binding.gyp 文件,npm 将默认使用 node-gyp 进行编译的预安装命令。--npm 文档
scripts
npm 支持package.json
文件的scripts
属性,适用于以下脚本:
prepublish
:在打包和发布包之前运行,以及在本地 npm install 上运行,不带任何参数。 (见下文)prepare
:在打包和发布包之前运行,并在本地 npm install 上运行,不带任何参数(见下文)。这是在预发布之后、仅在预发布之前运行的。prepublishOnly
:在准备和打包包之前运行,仅在 npm 发布上运行。 (见下文。)prepack
:在打包 tarball 之前运行(在 npm pack、npmpublish 上以及安装 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 将运行停止和启动脚本。preshrinkwrap
、 shrinkwrap
、 postshrinkwrap
:通过 npm Shrinkwrap 命令运行。来源:npm 文档。
config
{
"config" : {
"port" : " 8080 "
}
}
脚本中使用的配置选项或参数。
您的包很可能依赖于其他包。您可以在package.json
文件中指定这些依赖项。
dependencies
{
"dependencies" : {
"package-1" : " ^3.1.4 "
}
}
这些是包的开发和生产中所需的依赖项。
您可以指定精确版本、最低版本(例如
>=
)或版本范围(例如>= ... <
)。
devDependencies
{
"devDependencies" : {
"package-2" : " ^0.4.2 "
}
}
这些软件包仅在开发软件包时需要,但不会在生产中安装。
peerDependencies
{
"peerDependencies" : {
"package-3" : " ^2.7.18 "
}
}
对等依赖关系允许您声明您的包与其他包版本的兼容性。
optionalDependencies
{
"optionalDependencies" : {
"package-5" : " ^1.6.1 "
}
}
可选依赖项可以与您的包一起使用,但不是必需的。如果未找到可选包,安装仍会继续。
bundledDependencies
{
"bundledDependencies" : [
" package-4 "
]
}
捆绑依赖项是一组包名称,在发布包时将捆绑在一起。
您可以提供与您的软件包相关的系统级信息,例如操作系统兼容性等。
engines
{
"engines" : {
"node" : " >=4.4.7 <7.0.0 " ,
"zlib" : " ^1.2.8 " ,
"yarn" : " ^0.14.0 "
}
}
引擎指定必须与您的包一起使用的客户端版本。这会检查process.versions
以及当前的纱线版本。
os
{
"os" : [ " darwin " , " linux " ],
"os" : [ " !win32 " ]
}
这指定了您的软件包的操作系统兼容性。它检查process.platform
。
cpu
{
"cpu" : [ " x64 " , " ia32 " ],
"cpu" : [ " !arm " , " !mips " ]
}
使用它来指定您的程序包将仅在某些 CPU 架构上运行。这会检查process.arch
。
libc
{
"libc" : [ " glibc " ],
"libc" : [ " musl " ]
}
使用它来指定您的包仅在特定版本的 libc 上运行。这会根据detect-libc
的结果进行检查。
private
{
"private" : true
}
如果您不希望在包管理器中发布包,请将其设置为true
。
publishConfig
{
"publishConfig" : {
...
}
}
发布包时将使用这些配置值。例如,您可以标记您的包裹。
flat
{
"flat" : true
}
如果您的软件包仅允许给定依赖项的一个版本,并且您希望在命令行上强制执行与yarn install --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
] 安装依赖项会自动将resolutions
块添加到package.json
文件中。
workspaces
如果--use-workspaces
为 true,则packages
将被package.json/workspaces
中的值覆盖。
来源:--use-workspaces。
bolt
查看配置
{
"bolt" : {
"workspaces" : [
" utils/* " ,
" apps/* "
]
}
}
unpkg
如果省略文件路径(即使用“裸”URL), unpkg 将提供package.json
中unpkg
字段指定的文件,或回退到main
(源)。
types
如果您的包有一个主.js
文件,您还需要在package.json
文件中指示主声明文件。将types
属性设置为指向捆绑的声明文件。例如:
{
"main" : " ./lib/main.js " ,
"types" : " ./lib/main.d.ts "
}
请注意, typings
字段与types
同义,也可以使用。
另请注意,如果您的主声明文件名为index.d.ts
且位于包的根目录(位于index.js
旁边),则无需标记types
属性,但建议这样做。
来源:TypeScript 文档
注意:在 Flow 中他们使用不同的方法
flow:main
没有官方支持。提案就在这里。
browserslist
?在不同前端工具之间共享目标浏览器的库。它用于:
package.json
中的外部配置或 2.0 支持的browserslist
文件)当您将以下内容添加到package.json
时,所有依赖 Browserslist 的工具都会自动找到其配置:
{
"browserslist" : [
" > 1% " ,
" last 2 versions "
]
}
来源:浏览器列表。
另请参阅:创建 React 应用程序支持。
有关介绍,请参阅“设置多平台 npm 包”。
module
pkg.module
将指向具有 ES2015 模块语法的模块,但仅指向目标环境支持的语法功能。完整的描述在这里。
支持者:rollup、webpack
browser
browser
字段由模块作者提供,作为打包模块供客户端使用时对 javascript 捆绑器或组件工具的提示。提案就在这里。
支持者:rollup、webpack、browserify
请求支持:babel-plugin-module-resolver
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 "
}
}
另请参阅:通过 npm 交付未转译的源代码
es2015
未转译的 ES6 代码。来源:Angular 包格式 (APF) v5.0
esm
提案在这里:调整后的提案:ES module "esm": true package.json flag
参见:
module-browser
看到这个问题
也称为moduleBrowser
、 jsnext:browser
。
modules.root
在捍卫 .js 中提到。
还有modules.resolver
。
jsnext:main
已弃用
jsnext:main
已被pkg.module
取代,它指示带有导入/导出声明的文件的位置。原始提案在这里。
支持者:汇总。
react-native
工作原理与browser
类似,但适用于 React-native 特定模块。来源。
sideEffects
指示包的模块没有副作用(在评估时)并且仅公开导出。这允许像 webpack 这样的工具来优化重新导出。
另请参阅: sideEffects
示例,将函数标记为纯函数、eslint-plugin-tree-shaking 的建议。
source
, umd:main
请参阅在 package.json 中指定构建。
source
请参阅parcel-bundler/parcel#1652。
@std/esm
开发人员对几乎所有事情都有强烈的意见。为了适应, @std/esm
允许使用package.json
中的"@std/esm"
或"@std":{"esm":{}}
字段解锁额外功能。
来源:@std/esm Unlockables
jspm
您可以在 package.json 的基础上编写所有包属性,或者如果您不想更改专门用于npm
的现有属性,您可以在jspm
属性中编写特定于 jspm 的配置package.json 和 jspm 将在根级别配置选项上使用这些选项。
例如:
{
"name" : " my-package " ,
"jspm" : {
"main" : " jspm-main "
}
}
请参阅完整规格。
ignore
如果需要忽略某些特定文件或文件夹,可以将它们列在数组中。
format
选项有esm
、 amd
、 cjs
和global
。
从
npm
加载模块时,默认将模块格式视为cjs
,并且不会运行自动检测。要加载其他格式的模块,您需要手动覆盖此属性。
package.json 目前未使用模块格式
esm
(ECMAScript 模块)。
registry
jspm 理解注册表上下文中的依赖关系。
当从 npm 加载包时,jspm 会将默认注册表设置为npm
,并相应地处理依赖项。
从 GitHub 加载包时,在不存在注册表属性的情况下,依赖项属性将被忽略,因为 jspm 无法知道依赖项对于现有 GitHub 存储库意味着什么。
设置注册表属性还决定 jspm 如何解释包。例如,具有registry: "npm"
GitHub 包将在从 npm 获取其依赖项的同时,被解释为 CommonJS 并支持目录和 JSON 等功能,就像它一开始就从 npm 端点安装一样。
GitHub 上的包的注册表属性设置为registry: "jspm"
其依赖项将被视为 jspm 样式依赖项。
shim
作为全局变量编写的包需要填充程序配置才能在模块化环境中正常工作。要在包中填充文件some/global.js
,我们可以编写:
{
"shim" : {
"some/global" : {
"deps" : [ " jquery " ],
"exports" : " globalExportName "
}
}
}
deps
和exports
都是可选的。
exports
会被 SystemJS 加载器自动检测为脚本编写的任何全局变量。在大多数情况下,这种检测会正确进行。
如果没有exports
也支持"some/global": ["jquery"]
。
map
映射配置将重写内部需求以指向不同的本地或外部模块。
考虑一个包含其自己的依赖项的包, dep
位于third_party/dep
。它内部可能有一个 require 语句,例如:
require ( 'dep' ) ;
为了使用本地版本,我们可以这样写:
{
"map" : {
"dep" : " ./third_party/dep "
}
}
在子模块中通过包自己的名称引用包也很有用:
{
"map" : {
"thispackage" : " . "
}
}
然后我们可以正确解析import 'thispackage/module'
的内部需求。
映射配置还可以引用依赖子模块。
我们还可以通过将模块映射到空模块来完全排除模块:
{
"map" : {
"jquery" : " @empty "
}
}
返回的值将是一个没有导出的模块对象。
browserify.transform
文档在这里
proxy
人们通常从与后端实现相同的主机和端口提供前端 React 应用程序。
来源:开发中的代理 API 请求
homepage
来源:构建相对路径
babel
看到这个问题。
eslintConfig
jest
{
"jest" : {
"verbose" : true
}
}
来源:笑话文档
stylelint
请参阅:新的配置加载器
size-limit
如果您正在使用此库,您可以在package.json
中定义其配置:
{
"size-limit" : [
{
"limit" : " 9 KB " ,
"path" : " index.js "
}
]
}
来源:尺寸限制
pwmetrics
您可以在package.json
中指定选项:
{
"pwmetrics" : {
"url" : " http://example.com/ " ,
"expectations" : {
"ttfcp" : {
"warn" : " >=1500 " ,
"error" : " >=2000 "
}
}
}
}
所有可用选项都在这里
资料来源:pwmetrics
ava
例子:
"ava" : {
"require" : [ " @std/esm " ]
}
来源:ava
nyc
例子:
"nyc" : {
"extension" : [ " .js " , " .mjs " ],
"require" : [ " @std/esm " ]
}
来源:纽约
preferGlobal
已弃用
该选项用于触发 npm 警告,但不会再发出警告。它纯粹是为了提供信息。现在建议您尽可能将任何二进制文件安装为本地 devDependency。
style
package.json
中的style
属性对于导入 CSS 包很有用。提案就在这里。
支持者:parcelify、npm-less、rework-npm、npm-css。
另请参阅:istf 规范。
less
与style
相同但价格更低。
支持者:npm-less。
以下字段保留供将来扩展: build
、 default
、 email
、 external
、 files
、 imports
、 maintainer
、 paths
、 platform
、 require
、 summary
、 test
、 using
、 downloads
、 uid
。
以下字段保留供软件包注册表自行决定使用: id
、 type
。
所有以_
或$
开头的属性也保留给软件包注册表以供其自行决定。
来源:CommonJS 维基
standard
标准 JS 是一个 javaScript 样式指南、linter 和格式化程序,您可以向 package.json 添加一些属性,如parser
、 ignore
、 globals
、 plugins
。
例子:
"standard" : {
"parser" : " babel-eslint " ,
"ignore" : [
" **/out/ " ,
" /lib/select2/ " ,
" /lib/ckeditor/ " ,
" tmp.js "
]
}
另请参阅:标准 JS