package.json详解

  十二月一号,还有一个月就2020年了,亲爱的小伙伴大家还好么,这一年过得是否很充实,进步是否不少啊,我想你们都在忙着长大,忙着工做,忙着各类人情世故,可是我但愿可爱的你能够静下心来再好好的打磨本身,咱们这一代年轻人(包括笔者我也是)都很急躁,巴不得立刻成功?亦或是短时间成为一个很优秀的人,可是有些东西是急不得,须要沉下来仔细规划,不负韶华,想要的东西我相信早晚有一天会到来!咱们还很年轻,可是这个世界却慢慢的把咱们的棱角都磨平了,咱们很气愤可是却又无奈的只能接受,今天是个周日,我一大早也来了公司,感受世界也挺美的,周末的生活气息相对于忙碌的工做日浓厚了许多,静下来去享受生活。2019作最棒的本身!前端

 

Node 项目在项目根目录中名为 package.json 的文件中跟踪依赖关系和元数据。这是你项目的核心。它包含名称、描述和版本之类的信息,以及运行、开发以及有选择地将项目发布到 NPM 所需的信息。node

在本教程中,咱们将:ios

  • 了解 package.json 与项目之间的关系
  • 肯定重要字段和元数据
  • 了解如何管理 package.json

目标

了解什么是 package.json 文件,它与你项目的关系以及须要了解的常见属性。git

了解 package.json

若是你之前用过 Node.js,则可能会遇到 package.json 文件。它是一个 JSON 文件,位于项目的根目录中。你的 package.json 包含关于项目的重要信息。它包含关于项目的令人类可读元数据(如项目名称和说明)以及功能元数据(如程序包版本号和程序所需的依赖项列表)。github

package.json 示例以下所示:express

{
        "name": "my-project", "version": "1.5.0", "description": "Express server project using compression", "main": "src/index.js", "scripts": { "start": "node index.js", "dev": "nodemon", "lint": "eslint **/*.js" }, "dependencies": { "express": "^4.16.4", "compression": "~1.7.4" }, "devDependencies": { "eslint": "^5.16.0", "nodemon": "^1.18.11" }, "repository": { "type": "git", "url": "https://github.com/osiolabs/example.git" }, "author": "Jon Church", "contributors": [{ "name": "Amber Matz", "email": "example@example.com", "url": "https://www.osiolabs.com/#team" }], "keywords": ["server", "osiolabs", "express", "compression"] } 复制代码

package.json 的用途是什么?

项目的 package.json 是配置和描述如何与程序交互和运行的中心。 npm CLI(和 yarn)用它来识别你的项目并了解如何处理项目的依赖关系。package.json 文件使 npm 能够启动你的项目、运行脚本、安装依赖项、发布到 NPM 注册表以及许多其余有用的任务。 npm CLI 也是管理 package.json 的最佳方法,由于它有助于在项目的整个生命周期内生成和更新 package.json 文件。npm

package.json 会在项目的生命周期中扮演多个角色,其中某些角色仅适用于发布到 NPM 的软件包。即便你没有把项目发布到 NPM 注册表中,或者没有将其公开发布给其余人,那么 package.json 对于开发流程仍然相当重要。json

你的项目还必须包含 package.json,而后才能从 NPM 安装软件包。这多是你在项目中须要它的主要缘由之一。数组

package.json 中的常见字段

让咱们看一下 package.json 中包含的一些最多见和重要的字段,以更好地了解如何使用和管理这个基本文件。有些用来发布到 NPM,而其余一些则能够帮助 npm CLI 运行应用程序或安装依赖项。安全

实际的字段比咱们所介绍的要多,你能够在它的文档中了解其他字段,但如下的是必需要了解的 package.json 属性。

name

"name": "my-project"
复制代码

name 字段定义包的名称。发布到 NPM 注册表时,这是软件包将在其中显示的名称。它不能超过 214 个字符,只能是小写字母,而且必须是URL安全的(容许连字符和下划线,但 URL 中不容许使用空格或其余字符)。

若是将软件包发布到 NPM,则 name 属性是必需的,而且必须是惟一的。若是尝试用 NPM 注册表上当前已经使用的名称发布程序包,则会收到错误消息。若是你的软件包并非要发布到 NPM 上,则 name 没必要是惟一的。

version

"version": "1.5.0",
复制代码

version 字段对于任何已发布的软件包都很是重要,而且在发布以前是必填的。这是 package.json 描述的软件的当前版本。

你不须要使用 SemVer,但它是 Node.js 生态系统中使用的标准,强烈建议使用。对于未发布的程序包,此属性不是严格要求的。一般在将新版本发布到 NPM 以前,根据 SemVer,版本号会增长。当不依赖程序包做为依赖项或未将程序包发布到 NPM 时,一般不使用这个工做流程。可是若是将软件包用做依赖项,那么确保 version 字段保持最新很是重要,这样能够确保其余人所使用的软件包的正确版本。 了解有关语义版本控制(semantic versioning)的更多信息

license

这是很是重要但常常被忽略的属性。license 字段使咱们能够定义适用于 package.json 所描述代码的许可证。一样,在将项目发布到 NPM 注册表时,这很是重要,由于许可证可能会限制某些开发人员或组织对软件的使用。拥有清晰的许可证有助于明肯定义该软件可使用的术语。

license 字段的值一般是许可证的标识符代码——例如 MITISC 之类的字符串,它们表明MIT 许可证和 ISC 许可证。若是你不想提供许可证,或者明确不想授予使用私有或未发布的软件包的权限,则能够将 UNLICENSED 做为许可证。若是你不肯定要使用哪一个许可证, Choose a License 是对你有用的资源。

authorcontributors

"author": "Jon Church jon@example.com https://www.osioslabs.com/#team",
"contributors": [{
	"name": "Amber Matz",
	"email": "example@example.com",
	"url": "https://www.osiolabs.com/#team"
}],
复制代码

authorcontributors 字段的功能相似。它们都是 people 字段,能够是"Name" 格式的字符串,也能够是具备 name,email,url 字段的对象。email 和 url 都是可选的。

author 只供一我的使用,contributors 则能够由多我的组成。

这些字段是列出公共项目的联系人以及与贡献者共享信用的有用方法。

description

NPM 注册表将description 字段用于发布的软件包,以在搜索结果中和 npmjs.com 网站上描述该软件包。

当用户搜索 NPM 注册表时,该字符串用于帮助了解软件包。这应该是软件包的简短摘要。

即便你没有将其发布到 NPM 注册表中,它也能够用做项目的简单文档。

keywords

"keywords": ["server", "osiolabs", "express", "compression"]
复制代码

keywords 字段是一个字符串数组,其做用与描述类似。 NPM 注册表会为该字段创建索引,可以在有人搜索软件包时帮助找到它们。数组中的每一个值都是与你的程序包关联的一个关键字。

若是你不发布到 NPM 注册表,则这个字段用处不大,能够忽略它。

main

"main": "src/index.js",
复制代码

main 字段是 package.json 的功能属性。它定义了项目的入口点,一般是用于启动项目的文件。

若是你的包(例如其名称为 foo-lib)是由用户安装的,则当用户执行 require('foo-lib') 时,这是 require 返回的 main 字段中所列出的文件的 module.exports 属性。

它的值一般是项目根目录中的 index.js 文件,但也能够是你选择做为包的主入口的任何文件。

scripts

"scripts": {
	"start": "node index.js",
	"dev": "nodemon"
}
复制代码

scripts 字段是 package.json 中的另外一种元数据功能。scripts 属性接受一个对象,它的值为能够经过 npm run 运行的脚本,其键为实际运行的命令。这些一般是终端命令,咱们把它们放入 scripts 字段,能够既能够记录它们又能够轻松地重用。

scripts 是 npm CLI 用来运行项目任务的强大工具。他们能够完成开发过程当中的大多数任务。 了解有关 npm 脚本的更多信息

repository

"repository": {
	"type": "git",
	"url": "https://github.com/osiolabs/example.git"
}
复制代码

你能够经过提供 repository 字段来记录项目代码所在的资源库。该字段是一个对象,用于定义源代码所在的 url 及其使用的版本控制系统的类型。对于开源项目,多是以 Git 做为版本控制系统的 GitHub 或 Bitbucket 。

须要注意的是 URL 字段的本意是指向可从中访问版本控制的位置,而不只仅是指向已发布的代码库。

dependencies

"dependencies": {
	"express": "^4.16.4",
    "compression": "~1.7.4"
}
复制代码

这是 package.json 中最重要的字段之一,它列出了项目使用的全部依赖项(项目所依赖的外部代码)。使用 npm CLI 安装软件包时,它将下载到你的 node_modules/ 文件夹中,并将一个条目添加到你的依赖项属性中,注意软件包的名称和已安装的版本。

dependencies 字段是一个对象,其中的包名作为键,而版本或版本范围为值。从这个列表中,当在目录中运行 npm install 时,npm 知道要获取和安装哪些包(以及什么版本)。 package.jsondependencies 字段位于项目的核心,并定义项目所需的外部包。

在依赖版本中看到的插入符号(^)和波浪号(~)是 SemVer 中定义的版本范围的表示法。 了解有关依赖版本和 SemVer 的更多信息

devDependencies

"devDependencies": {
	"nodemon": "^1.18.11"
}
复制代码

dependencies 字段相似,可是这里列出的包仅在开发期间须要,而在生产中不须要。

例如,在开发过程当中使用工具从新加载项目,好比 nodemon,一旦程序部署并投入生产,将不会再使用它。devDependencies 属性使咱们能够明确地指出生产中不须要哪些依赖项。在生产环境中安装应用程序时,能够用 npm install --production 仅安装 package.jsondependency 字段中列出的内容。

devDependency 是记录开发过程当中程序须要哪些工具的好方法。要将 npm 的软件包做为 devDependency 安装,能够运行 npm install --save-dev

devDependencies 属性的另外一种用途是在咱们的 npm 脚本中使用它们。 了解有关在npm脚本中使用 devDependencies 的更多信息

管理你的 package.json

package.json 文件必须是有效的 JSON。这意味着任何缺乏的逗号、丢失的引号或其余格式错误都将阻止 npm 与 package.json 进行交互。若是确实引入了错误,则下次运行 npm 命令时将会看到错误提示。建议尽量使用 npm CLI 更新和管理 package.json,以免意外将错误引 入package.json 中。

使用 npm init 建立你的 package.json 将有助于确保你生成有效的文件。

最好使用 npm 的命令 npm installnpm uninstallnpm update 来管理依赖项,这样可使你的 package.jsonnode_modules/ 文件夹保持同步。若是手动添加依赖项列表的话,须要你在把依赖项实际安装到项目以前运行 npm install

由于 package.json 仅是咱们记录依赖项的位置,而 node_modules/ 文件夹是安装依赖项代码的实际位置,因此手动更新 package.json 的依赖项字段不会当即将咱们的状态反映到 node_modules/ 文件夹。这就是为何要用 npm 帮助管理依赖项的缘由,由于它会同时更新 package.jsonnode_modules/ 文件夹。

你固然能够在文本编辑器中手动编辑 package.json 并进行更改,只要你注意不要引入任何 JSON 格式错误,这对大多数字段都适用。可是我建议你尽量使用 npm CLI 命令。

总结

package.json 文件是 Node 项目的核心。它记录了有关发布到 NPM 以前所须要的项目的重要元数据,它还定义了 npm 用于安装依赖项、运行脚本以及标识包的入口点的项目功能属性。

并不是 package.json 中全部字段都适用于你,可是咱们能够经过其在 package.json 文件中记录有关程序的信息来得到一些强大的好处。了解 package.json 的角色以及它与 npm 的关系是开发 Node.js 应用的重要组成部分,而且正日益成为 JavaScript 生态系统的重要组成部分。

进一步了解

其余资源


做者:前端先锋
连接:https://juejin.im/post/5ddf97986fb9a071ac1a0b09
来源:掘金
相关文章
相关标签/搜索