今天主要介绍一些常见配置,我把它们分为了 7 大类:
- 描述配置
- 文件配置
- 脚本配置
- 依赖配置
- 发布配置
- 系统配置
- 第三方配置
1. 描述配置
主要是项目的基本信息,包括名称,版本,描述,仓库,作者等,部分会展示在 npm 官网上。
name
项目的名称,如果是第三方包的话,其他人可以通过该名称使用 npm install 进行安装。
"name": "react"
version
项目的版本号,开源项目的版本号通常遵循 semver 语义化规范,具体规则如下图所示:
简单介绍一下:
- 1 代表主版本号 Major,通常在涉及重大功能更新,产生了破坏性变更时会更新此版本号
- 2 代表次版本号 Minor,在引入了新功能,但未产生破坏性变更,依然向下兼容时会更新此版本号
- 3 代表修订号 Patch,在修复了一些问题,也未产生破坏性变更时会更新此版本号
除了 X.Y.Z 这样的标准版本号,还有 Pre-release 和 Metadata 来描述项目的测试版本,关于 semver 规范更多的内容,可以参考https://juejin.cn/post/7122240572491825160 。
回到 package.json 的 version 字段,name + version 能共同构成一个完全唯一的项目标识符,所以它两是最重要的两个字段。
"version": "18.2.0"
repository
项目的仓库地址以及版本控制信息。
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
"directory": "packages/react"
}
description
项目的描述,会展示在 npm 官网,让别人能快速了解该项目。
"description": "React is a JavaScript library for building user interfaces."
keywords
一组项目的技术关键词,比如 Ant Design 组件库的 keywords 如下:
"keywords": [
"ant",
"component",
"components",
"design",
"framework",
"frontend",
"react",
"react-component",
"ui"
],
好的关键词可以帮助别人在 npm 官网上更好地检索到此项目,增加曝光率。
homepage
项目主页的链接,通常是项目 github 链接,项目官网或文档首页。
"homepage": "https://reactjs.org/"
bugs
项目 bug 反馈地址,通常是 github issue 页面的链接。
"bugs": "https://github.com/vuejs/core/issues"
license
项目的开源许可证。项目的版权拥有人可以使用开源许可证来限制源码的使用、复制、修改和再发布等行为。常见的开源许可证有 BSD、MIT、Apache 等,它们的区别可以参考:如何选择开源许可证?https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
"license": "MIT"
author
项目作者。
"author": "Li jiaxun",
2. 文件配置
包括项目所包含的文件,以及入口等信息。
files
项目在进行 npm 发布时,可以通过 files 指定需要跟随一起发布的内容来控制 npm 包的大小,避免安装时间太长。
发布时默认会包括 package.json,license,README 和main 字段里指定的文件。忽略 node_modules,lockfile 等文件。
在此基础上,我们可以指定更多需要一起发布的内容。可以是单独的文件,整个文件夹,或者使用通配符匹配到的文件。
"files": [
"filename.js",
"directory/",
"globstylestyle*.{js,jsx,ts,tsx}": [
"eslint --fix",
"git add -A"
]
}
lint-staged 通常配合 husky 这样的 git-hooks 工具一起使用。git-hooks 用来定义一个钩子,这些钩子方法会在 git 工作流程中比如 pre-commit,commit-msg 时触发,可以把 lint-staged 放到这些钩子方法中。
8. 结语
今天我们简单了解了 package.json 的常见配置。有了这些知识,我敢说绝大多数项目的 package.json 你都能毫无压力的阅读。
但 package.json 里的内容远不止如此,比如 semver 规范,入口文件,项目依赖等都还有很多值得深入的内容,认识他们只是第一步。
9. 参考
https://docs.npmjs.com/cli/v8/configuring-npm/package-json
https://zhuanlan.zhihu.com/p/548202395 by WangHaoyu
https://juejin.cn/post/7095903278084390948 by 摸鱼的春哥
https://juejin.cn/post/7122240572491825160 by 摸鱼的春哥
https://zhuanlan.zhihu.com/p/29855253 by 风清洋
https://juejin.cn/post/7023539063424548872 by CUGGZ
https://segmentfault.com/a/1190000016365409 by senntyou
https://github.com/SunshowerC/blog/issues/8 by SunshowerC
https://www.ruanyifeng.com/blog/2020/08/how-nodejs-use-es6-module.html by 阮一峰