如果你在过去几年中一直在开发 JavaScript 和/或 Node.js 项目,那么你肯定会遇到一些 package.json
文件,即 npm 对项目和模块的配置文件。
启动一个项目
使用 npm 包管理器启动项目的最简单、最快的方式是使用init
命令和-y
旗,该命令对所有问题都回答是:
1$ npm init -y
<$>[注]项目名称将与您所在的当前文件夹的名称相同。
init
命令会将一个package.json
文件写入当前目录中,其 JSON 内容看起来如下:
1{
2 "name": "hello-alligator",
3 "version": "1.0.0",
4 "description": "",
5 "main": "index.js",
6 "scripts": {
7 "test": "echo \"Error: no test specified\" && exit 1"
8 },
9 "keywords": [],
10 "author": "",
11 "license": "ISC"
12}
让我们来看看初始 package.json 文件中的每个键:
名称:项目名称,应全部为下大小写和URL安全. 名称可以被前缀为范围(即:@angular/angular-cli),如果项目是私有的,是可选的,但如果项目要公开公布,则需要名称,而且必须在npm寄存器上独有. (_) ) 版本: 由node-semver理解的版本编号. 这对私人来说也是可选的,对公共模块来说也是必要的,非常重要。 (_)
- 说明: 项目简介. 此选项是可选的, 如果您可以在寄存器上轻松找到此项目, 则有用 。 ( _) ) * 主:项目条目文件.
- 脚本:
scripts' 密钥期望一个以脚本名称为密钥并命令为值的对象。 用于指定可以直接从命令行运行的脚本, 并且可以做各种事情, 例如在本地服务器上启动您的项目, 构建用于制作或运行您的测试 。 很可能
文字'是典型软件包中最手工的改动。 json 文件. (_) ) * 关键词: 用于帮助在 npm 寄存器上找到模块的一组关键字( ) ) * 作者: 作者字段期望有姓名'、
电子邮件'和`url'等密钥的对象。 这样,人们就很容易与项目所有人取得联系。 () - 许可证: 需要使用其SPDX标识符的许可证名称。 它不使用ISC许可证, " MIT " 将是另一种流行的许可证选择。 也可以使用
UNLICENSED
进行私人和封闭源码的项目。 (_) (英语)
管理依赖
npm 的主要优势在于它能够轻松地管理项目的依赖性,因此对于一个项目的 package.json 文件来说,它主要集中在指定项目的依赖性方面,有常规依赖性,但也可以有 devDependencies、peerDependencies、optionalDependencies 和 bundledDependencies。
- 依赖关系: 正常的项目依赖性。 这是你大部分的依赖最有可能。 使用
$npm 安装我的依赖性
添加此类依赖性到您的工程中 。 - 依赖性 : 只有在项目进行时才有用的依赖。 例如,测试库和转接器往往应作为devdependents被添加. 使用 npm 的
- save- dev
旗下添加一个 devdependency , 并带有安装命令 。 - 可选的依赖性 : npm应作为可选的依赖。 这意味着npm不会在可选的依赖性无法满足时抱怨或无法安装. 使用安装命令的
-save- optional
安装可选依赖性 。 - 捆绑 依赖性: 期望一系列的软件包名称,这些名称将与项目捆绑在一起。 使用安装命令的
save- bundle
旗子表示依赖性, 也可以添加到捆绑的依赖性列表中 。 - 依赖性 : 对等依赖性对于指定您项目所依赖的模块是有用的。 这样, npm 将会在缺少一些对等依赖时发出警告 。 (单位:千美元) (英语)
正如您之前可能已经看到的,依赖可以接受不同的格式来指定哪些版本或版本范围可以用于依赖。
- 2.4.2: 准确版本 2.4.2
- ^2.4.2: 与版本 2.4.2 兼容的最新版本* ~2.4.2: 适用于版本如 2.4.2, 2.4.3, 2.4.4,...
- ~2.4: 此功能适用于版本如 2.4, 2.5, 2.6,...
- 2.4.x: 适用于包的任何修补版本 2.4
- 2.x: 适用于包的任何小版本 2
=2.4: 一个版本大于或等于 2.4.4。 您也可以使用 <, <=或 >
- 2.4.2 3.1.1: 包括版本 2.4.2 和版本 3.1.1(_MK
您甚至可以指定多个可能的版本范围,通过将每一个范围分开以``来指定。
更有用的配置密钥
有更多的配置可选地进入您的项目的 package.json 文件,所以让我们简要地触摸一些最有用的配置:
- 浏览器 : 使用浏览器密钥代替
main
, 用于原定用于浏览器而非服务器的项目 。 (_) ) * 私人: 如果这个密钥被设定为true
, 则项目将无法向 npm 仓库公开发布 。 如果您想要防止不小心向世界发布一个项目, 这样做是有用的 。 - 引擎 : 使用 " 引擎 " 来指定项目与之合作的节点和/或npm的具体版本。 它需要一个带有
节点
和(或)npm
键的对象,并需要一个看起来与指定一系列版本的依赖性值相似的值。 (_) ) * 主页:项目主页的URL. - bugs:一个可以报告问题和bug的URL. 这经常是 Github 的 URL 。 ()
) * 文件 : 此可选密钥预计当工程被添加到另一个工程的依赖时会包含一系列文件. 文件名/路径可以使用 glob 模式,当
文件
密钥没有被提供默认值['*' 时,这意味着将包含所有文件。 不过,不用担心,某些文件/文件夹,如
.git'和`nome_modules',总是被忽略。 () (英语)
有了这个,你应该有一个很好的总体想法,什么可以进入你的 package.json 配置. 你也可以参考 官方文档对所有可能的配置密钥的细节。