2. package.json
2. package.json
要点
在你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
规则
- 必须小于或等于214个字符(包括
@scope/
范围包)。
- 不得以点(
.
)或下划线(_
)开头。
- 名称中不能有大写字母。
- 必须只使用网址安全的字符。
提示
- 不要使用与核心Node.js模块相同的名称
- 不要把
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认可的)许可证,除非您有特定的理由不要。如果您将自己的软件包作为工作的一部分,最好在决定许可证之前向公司咨询。
必须是以下之一:
- 如果您使用标准许可证,则为有效的SPDX许可证标识符。
- 如果您使用多个标准许可证,则为有效的SPDX许可证表达式句法2.0表达式。
- SEE LICENSE IN <filename>指向一个字符串<filename>,如果在你的包的顶层你使用的是非标准的许可证。
- 一个
UNLICENSED
字符串,如果您不想授予他人根据任何条款使用私人或未发布的软件包的权利。
链接
各种文档链接,文件存放位置以及程序包代码的实际位置。
homepage
{
"homepage": "https://your-package.org"
}
首页是您的包裹的着陆页或文件的URL。
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": "you@example.com", "url": "http://your-website.com" },
"author": "Your Name <you@example.com> (http://your-website.com)"
}
包作者信息。作者是一个人。
contributors
{
"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" }
],
"contributors": [
"Your Friend <friend@example.com> (http://friends-website.com)",
"Other Friend <other@example.com> (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。
某些脚本名称很特殊。如果已定义,则preinstall
在安装包装之前脚本将被Yarn调用。出于兼容性考虑,调用install
,postinstall
及prepublish
的脚本后你的包安装完成后都将被调用。
该start
脚本值默认为node server.js
。
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"
]
}
捆绑依赖关系是一系列包名称,将在发布包时捆绑在一起。
flat
{
"flat": true
}
如果您的软件包只允许给定依赖项的一个版本,并且您希望强制执行与yarn install --flat
命令行上相同的行为,请将其设置为true
。
请注意,如果您的package.json
包含"flat": true
与其他包依赖你的(例如,你正在建设一个图书馆,而不是应用程序),这些其他的包也需要"flat": true
在自己的package.json
或安装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
文件添加一个块。
系统
您可以提供与您的软件包相关的系统级信息,例如操作系统兼容性等。
engines
{
"engines": {
"node": ">=4.4.7 <7.0.0",
"zlib": "^1.2.8",
"yarn": "^0.14.0"
}
}
引擎指定必须与您的软件包一起使用的客户端版本。这可以检查process.versions
Yarn的当前版本。
os
{
"os": ["darwin", "linux"],
"os": ["!win32"]
}
这为您的软件包指定了操作系统兼容性。它检查process.platform
。
cpu
{
"cpu": ["x64", "ia32"],
"cpu": ["!arm", "!mips"]
}
用它来指定你的软件包只能运行在某些CPU架构上。并反过来检查process.arch
。
出版
private
{
"private": true
}
如果您不希望在软件包管理器中发布软件包,请将其设置为true
。
publishConfig
{
"publishConfig": {
...
}
}
发布您的软件包时将使用这些配置值。例如,您可以标记您的包。