当前位置: 首页 > 后端技术 > Node.js

package.json详解

时间:2023-04-03 12:27:51 Node.js

翻译:疯狂的技术极客原文:https://heynode.com/tutorial/...Node项目严禁未经授权转载在项目根目录下名为package.json的文件中跟踪依赖关系和元数据。这是您项目的核心。它包含名称、描述和版本等信息,以及运行、开发和选择性地将项目发布到NPM所需的信息。在本教程中,我们将:了解package.json和您的项目之间的关系识别重要的字段和元数据学习如何管理package.json对象了解什么是package.json文件,它与您的项目有何关系,以及常见的事情了解属性。了解package.json如果您以前使用过Node.js,您可能遇到过package.json文件。它是位于项目根目录中的JSON文件。您的package.json包含有关您的项目的重要信息。它包含有关项目的人类可读元数据(例如项目名称和描述)以及功能元数据(例如程序包版本号和程序所需的依赖项列表)。示例package.json如下所示:{"name":"my-project","version":"1.5.0","description":"Expressserverprojectusingcompression","main":"src/index.js","scripts":{"start":"nodeindex.js","dev":"nodemon","lint":"eslint**/*.js"},"dependencies":{"express":"^4.16.4","compression":"~1.7.4"},"devDependencies":{"eslint":"^5.16.0","nodemon":"^1.18.11"},"存储库“:{“类型”:“git”,“url”:“https://github.com/osiolabs/example.git”},“作者”:“乔恩教堂”,“贡献者”:[{“名称":"AmberMatz","email":"example@example.com","url":"https://www.osiolabs.com/#team"}],"keywords":["server","osiolabs","express","compression"]}package.json的用途是什么?项目的package.json是配置的核心,描述了如何与程序交互和运行程序。npmCLI(和yarn)使用它来识别您的项目并了解如何处理项目的依赖项。package.json文件使npm能够启动您的项目、运行脚本、安装依赖项、发布到NPM注册表以及许多其他有用的任务。npmCLI也是管理package.json的最佳方式,因为它有助于在项目的整个生命周期内生成和更新package.json文件。package.json在项目的生命周期中起着多种作用,其中一些仅适用于发布到NPM的包。即使您不将您的项目发布到NPM注册中心,或者不向其他人公开,package.json仍然对开发过程至关重要。您的项目还必须包含package.json,然后才能从NPM安装包。这可能是您在项目中需要它的主要原因之一。package.json中的常用字段让我们看一下package.json中包含的一些最常用和最重要的字段,以更好地理解如何使用和管理这个基本文件。有些用于发布到NPM,而另一些则帮助npmCLI运行应用程序或安装依赖项。实际字段比我们介绍的要多,您可以在其文档中阅读其余部分,但以下是必须知道的package.json属性。name"name":"my-project"name字段定义包的名称。当发布到NPM注册表时,这是包将出现在那里的名称。它不能超过214个字符,只能是小写,并且必须是URL安全的(允许使用连字符和下划线,但不允许在URL中使用空格或其他字符)。如果将包发布到NPM,name属性是必需的,并且必须是唯一的。如果您尝试使用已在NPM注册表中使用的名称发布包,您将收到错误消息。如果您的包不打算发布到NPM,则名称不必是唯一的。version"version":"1.5.0",version字段对于任何已发布的包都非常重要,在发布之前是必需的。这是package.json描述的软件的当前版本。您不需要使用SemVer,但它是Node.js生态系统中使用的标准,强烈建议使用它。对于未发布的包,此属性不是必需的。通常在将新版本发布到NPM之前,版本号会根据SemVer递增。当包不需要作为依赖项或包未发布到NPM时,通常不使用此工作流程。但是如果包被用作依赖项,保持版本字段是最新的很重要,这样其他人才能使用正确版本的包。了解有关语义版本控制的更多信息。license这是一个非常重要但经常被忽视的属性。license字段允许我们定义适用于package.json描述的代码的许可证。此外,这在将项目发布到NPM注册表时非常重要,因为许可证可能会限制某些开发人员或组织对软件的使用。拥有明确的许可有助于明确定义软件的使用条款。license字段的取值通常是license的标识码——比如MIT或者ISC这样的字符串,分别代表MITlicense和ISClicense。如果您不想提供许可证,或者明确不想授予使用私有或未发布包的权限,您可以将UNLICENSED作为许可证传递。如果您不确定要使用哪个许可证,选择许可证是对您有用的资源。作者和贡献者“作者”:“乔恩教堂jon@example.comhttps://www.osioslabs.com/#team”,“贡献者”:[{“名称”:“AmberMatz”,“电子邮件”:“示例@example.com","url":"https://www.osiolabs.com/#team"}],author和contributors字段具有类似的功能。都是people字段,可以是“Name”格式的字符串,也可以是name、email、url字段的对象。电子邮件和网址都是可选的。author只能为一个人,contributors可以由多人组成。这些字段是列出公共项目联系人并与贡献者分享信用的有用方式。descriptionNPM注册表使用已发布包的描述字段来描述搜索结果和npmjs.com网站上的包。当用户搜索NPM注册表时,此字符串用于帮助理解包。这应该是包的简短摘要。即使您不将其发布到NPM注册表,它也可以用作您项目的简单文档。keywords"keywords":["server","osiolabs","express","compression"]keywords字段是一个字符串数组,作用和描述的差不多。NPM注册表对该字段进行索引,以帮助在有人搜索包时找到它们。数组中的每个值都是与您的包关联的键。如果您不发布到NPM注册表,则此字段不是很有用,可以忽略。main"main":"src/index.js",main字段是package.json的一个功能属性。它定义项目的入口点,通常是用于启动项目的文件。如果你的包(比如说它被命名为foo-lib)是由用户安装的,那么当用户确实需要('foo-lib')时,这是require属性返回的主要字段中列出的文件的module.exports。它的值通常是项目根目录中的index.js文件,但也可以是您选择作为包的主要入口点的任何文件。scripts"scripts":{"start":"nodeindex.js","dev":"nodemon"}scripts字段是package.json中的另一个元数据特性。scripts属性采用一个对象,其值是可以通过npmrun运行的脚本,其键是要运行的实际命令。这些通常是终端命令,我们将它们放在脚本字段中,以便我们既可以记录它们又可以轻松地重用它们。scripts是npmCLI用来运行项目任务的强大工具。他们可以完成开发过程中的大部分任务。了解有关npm脚本的更多信息。repository"repository":{"type":"git","url":"https://github.com/osiolabs/example.git"}可以提供repository字段记录项目代码所在的repository.该字段是一个对象,它定义了源代码所在的url以及它使用的版本控制系统的类型。对于开源项目,它可能是GitHub或以Git作为版本控制系统的Bitbucket。请注意,URL字段旨在指向可以访问版本控制的位置,而不仅仅是指向已发布的代码存储库。dependencies"dependencies":{"express":"^4.16.4","compression":"~1.7.4"}这是package.json中最重要的字段之一,它列出了项目使用的所有依赖项(项目依赖的外部代码)。当您使用npmCLI安装包时,它将被下载到您的node_modules/文件夹中,并且一个条目将被添加到您的依赖项属性中,记录包的名称和安装的版本。dependencies字段是一个以包名作为键,以版本或版本范围作为值的对象。从这个列表中,npm知道在目录上运行npminstall时要获取和安装哪些包(以及什么版本)。package.json的dependencies字段是项目的核心,定义了项目需要的外部包。从属版本中看到的脱字符号(^)和波浪号(~)是SemVer中定义的版本范围符号。了解有关依赖项版本和SemVer的更多信息。devDependencies"devDependencies":{"nodemon":"^1.18.11"}类似于dependencies字段,但这里列出的包只在开发期间需要,而不是在生产期间。例如,在开发过程中使用一个工具重新加载项目,如nodemon,一旦程序部署并投入生产,将不会再次使用。devDependencies属性允许我们明确指出生产中不需要哪些依赖项。在生产环境中安装应用程序时,npminstall--production可用于仅安装package.json的依赖项字段中列出的内容。devDependency是记录您的程序在开发过程中需要哪些工具的好方法。要将npm包安装为devDependency,请运行npminstall--save-dev。devDependencies属性的另一个用途是在我们的npm脚本中使用它们。了解有关在npm脚本中使用devDependencies的更多信息。管理您的package.jsonpackage.json文件必须是有效的JSON。这意味着任何缺少逗号、缺少引号或其他格式错误都会阻止npm与package.json交互。如果您确实引入了错误,您将在下次运行npm命令时看到它。建议尽可能使用npmCLI更新和管理package.json,以避免意外将错误引入package.json。使用npminit创建package.json将有助于确保生成有效文件。最好使用npm的命令npminstall、npmuninstall和npmupdate来管理依赖项,这将使您的package.json和node_modules/文件夹保持同步。手动添加依赖项列表需要您在实际将依赖项安装到项目之前运行npminstall。因为package.json只是我们记录依赖项的地方,而node_modules/文件夹是安装依赖代码的实际位置,手动更新package.json的dependencies字段不会立即将我们的状态反映到node_modules/文件夹中。这就是npm帮助管理依赖项的原因,因为它会同时更新package.json和node_modules/文件夹。您当然可以在文本编辑器中手动编辑package.json并进行更改,只要您注意不要引入任何JSON格式错误,这应该适用于大多数字段。但我建议您尽可能使用npmCLI命令。总结package.json文件是Node项目的核心。它记录了发布到NPM之前所需的有关项目的重要元数据,它还定义了npm用于安装依赖项、运行脚本和识别包入口点的项目功能属性。并非package.json中的所有字段都适用于您,但我们可以通过在package.json文件中记录有关程序的信息来获得一些强大的好处。了解package.json的作用及其与npm的关系是开发Node.js应用程序的重要部分,并且正在成为JavaScript生态系统中越来越重要的部分。详细了解您可以使用哪些其他格式提供存储库?(docs.npmjs.com)将私有字段添加到package.json对发布到NPM有何影响?(docs.npmjs.com)其他资源npm-package.json:npm的package.json处理细节(docs.npmjs.com)选择开源许可证(choosealicense.com)