最全的package.json解析

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

package.json 的用途是什么?

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

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

你的项目还必须包含package.json,然后才能从 NPM 安装软件包。这可能是你在项目中需要它的主要原因之一。

package.json 中的常见字段

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

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

"main" 定义项目入口文件,通常是用于启动项目的文件

“description“当用户搜索 NPM 注册表时,该字符串用于帮助了解软件包。这应该是软件包的简短摘要。就是一个项目的简单的文档

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

“author“和“contributors“它们都是people字段,可以是"Name"格式的字符串,也可以是具有name,email,url字段的对象。email 和 url 都是可选的。这些字段是列出公共项目的联系人以及与贡献者共享信用的有用方法

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

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

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

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

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

在依赖版本中看到的插入符号(^)和波浪号(~)是 SemVer 中定义的版本范围的表示法

~)会匹配最新的小版本依赖包,比如~1.2.3会匹配1.2.x以上。但是不包括1.3以上

^)会匹配最新的大版本依赖包,比如^1.2.3会匹配1.x.x以上。但是不包括2.0.0以上

(*)会匹配最新的版本依赖包

“devDependencies“这里列出的包仅在开发期间需要,而在生产中不需要

“browserslist“用于告知要支持哪些浏览器(及其版本)。 Babel、Autoprefixer 和其他工具会用到它,以将所需的 polyfill 和 fallback 添加到目标浏览器

“private“如果设置为 true,则可以防止应用程序/软件包被意外发布到 npm 上。无法通过npm publish发布代码

“type“值为'moduel'则当作es模块处理;值为'commonjs'则被当作commonJs模块处理,如果没有定义则默认commonJs规范处理。不管type定义什么值,.mjs的文件都按照es模块来处理,.cjs的文件都按照commonJs模块来处理


版权声明:本文为xuefu2008原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。