eslint-plugin-package-json

eslint-plugin-package-json

ESLint插件助力维护高质量package.json文件

eslint-plugin-package-json是一款专为package.json文件设计的ESLint插件。它提供多项规则,用于保证文件的一致性、可读性和有效性。主要功能包括属性排序、依赖项检查和版本验证等。该插件适用于独立项目和monorepo结构,配置简便,可与Prettier协同工作。通过使用这个插件,开发团队能更轻松地维护标准化的package.json文件。

ESLintpackage.json插件规则配置Github开源项目
<h1 align="center">eslint-plugin-package-json</h1> <p align="center">用于保持一致、可读性和有效性的package.json文件规则。🗂️</p> <p align="center"> <a href="#contributors" target="_blank"> <!-- prettier-ignore-start --> <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> <img alt="所有贡献者:15 👪" src="https://yellow-cdn.veclightyear.com/835a84d5/31fe7c86-cddb-4592-a11a-40e74f6ea9d8.svg" /> <!-- ALL-CONTRIBUTORS-BADGE:END --> <!-- prettier-ignore-end --> </a> <a href="https://codecov.io/gh/JoshuaKGoldberg/eslint-plugin-package-json" target="_blank"><img alt="Codecov 测试覆盖率" src="https://yellow-cdn.veclightyear.com/835a84d5/eb267c4a-bb8e-4b70-8c80-61de7b16cc0a.svg"/></a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="贡献者公约" src="https://img.shields.io/badge/code_of_conduct-enforced-21bb42" /></a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/main/LICENSE.md" target="_blank"><img alt="许可证:MIT" src="https://img.shields.io/github/license/JoshuaKGoldberg/eslint-plugin-package-json?color=21bb42"></a> <img alt="代码风格:Prettier" src="https://yellow-cdn.veclightyear.com/835a84d5/3a9f73bb-ff06-430c-8fdc-e1d1c829b84b.svg" /> <a href="https://www.npmjs.com/package/eslint-plugin-package-json"><img alt="npm包版本" src="https://img.shields.io/npm/v/eslint-plugin-package-json?color=21bb42" /></a> </p>

安装

本插件需要 ESLint 8 和 jsonc-eslint-parser

npm install eslint eslint-plugin-package-json jsonc-eslint-parser --save-dev

使用方法

扁平配置

本插件的推荐配置会在 **/package.json 文件上启用其规则,并使用 jsonc-eslint-parser 解析它们:

在你的 ESLint 配置文件中:

import packageJson from "eslint-plugin-package-json/configs/recommended"; export default [ // 你的其他 ESLint 配置 packageJson, ];

如果你想覆盖推荐的规则:

import packageJson from "eslint-plugin-package-json/configs/recommended"; export default [ // 你的其他 ESLint 配置 { ...packageJson, rules: { ...packageJson.rules, "package-json/valid-package-def": "off", }, }, ];

有关如何自定义规则和其他配置设置的详细信息,请参阅 ESLint 的《配置文件》指南

传统配置

在你的 ESLint 配置文件中为 package.json 文件添加一个覆盖,指定本插件、jsonc-eslint-parser 以及其推荐规则:

module.exports = { overrides: [ { extends: ["plugin:package-json/recommended"], files: ["package.json"], parser: "jsonc-eslint-parser", plugins: ["package-json"], }, ], };

你可能还想单独配置规则。有关如何自定义规则的详细信息,请参阅 ESLint 的《配置规则》指南

module.exports = { overrides: [ { extends: ["plugin:package-json/recommended"], files: ["package.json"], parser: "jsonc-eslint-parser", plugins: ["package-json"], rules: { "package-json/valid-package-def": "error", }, }, ], };

与 Prettier 一起使用

prettier-plugin-packagejson 是一个 Prettier 插件,它强制执行与默认选项下的 order-propertiessort-collections 规则相同的 package.json 键排序。我们建议同时使用 Prettier 插件和 eslint-plugin-package-json 的推荐配置。默认设置不会冲突,Prettier 插件可以在编辑器保存时和/或作为 Git 钩子快速修复排序。

支持的规则

<!-- prettier-ignore-start --> <!-- begin auto-generated rules list -->

💼 表示在配置中启用。
✅ 表示在 recommended 配置中设置。
🔧 表示可通过 --fix CLI 选项 自动修复。
💡 表示可通过 编辑器建议 手动修复。

名称描述💼🔧💡
order-properties包属性必须按标准顺序声明🔧
repository-shorthand强制使用对象或简写方式声明仓库🔧
sort-collections依赖项、脚本和配置值必须按字母顺序声明🔧
unique-dependencies确保如果指定了仓库目录,它与package.json文件的路径匹配💡
valid-local-dependency检查package.json中本地依赖项的存在性
valid-name强制包名为有效的npm包名
valid-package-def确保package.json包含npm规范要求的所有属性
valid-repository-directory确保如果指定了仓库目录,它与package.json文件的路径匹配💡
valid-version强制包版本为有效的语义化版本规范

这些规则仅在package.json文件上运行;它们将忽略所有其他被检查的文件。 它们可以检查项目根目录和项目任何子文件夹中的package.json文件,使得这个插件非常适合单体仓库。

贡献者

<!-- spellchecker: disable --> <!-- ALL-CONTRIBUTORS-LIST:START - 请勿删除或修改此部分 --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="https://alan.norbauer.com"><img src="https://avatars.githubusercontent.com/u/1009?v=4?s=100" width="100px;" alt="Alan"/><br /><sub><b>Alan</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Aaltano" title="Bug报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=altano" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/AndreasLindbergPAF"><img src="https://avatars.githubusercontent.com/u/59874563?v=4?s=100" width="100px;" alt="Andreas Lindberg"/><br /><sub><b>Andreas Lindberg</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Aandreaslindbergpaf" title="Bug报告">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="http://technotes.khitrenovich.com/"><img src="https://avatars.githubusercontent.com/u/3424762?v=4?s=100" width="100px;" alt="Anton Khitrenovich"/><br /><sub><b>Anton Khitrenovich</b></sub></a><br /><a href="#ideas-khitrenovich" title="想法、规划与反馈">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://azat.io"><img src="https://avatars.githubusercontent.com/u/5698350?v=4?s=100" width="100px;" alt="Azat S."/><br /><sub><b>Azat S.</b></sub></a><br /><a href="#ideas-azat-io" title="想法、规划与反馈">🤔</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=azat-io" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Zamiell"><img src="https://avatars.githubusercontent.com/u/5511220?v=4?s=100" width="100px;" alt="James"/><br /><sub><b>James</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=Zamiell" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zetlen"><img src="https://avatars.githubusercontent.com/u/1643758?v=4?s=100" width="100px;" alt="James Zetlen"/><br /><sub><b>James Zetlen</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=zetlen" title="代码">💻</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Azetlen" title="Bug报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=zetlen" title="文档">📖</a> <a href="#infra-zetlen" title="基础设施(托管、构建工具等)">🚇</a> <a href="#maintenance-zetlen" title="维护">🚧</a> <a href="#tool-zetlen" title="工具">🔧</a></td> <td align="center" valign="top" width="14.28%"><a href="https://piranna.github.io/"><img src="https://avatars.githubusercontent.com/u/532414?v=4?s=100" width="100px;" alt="Jesús Leganés-Combarro"/><br /><sub><b>Jesús Leganés-Combarro</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=piranna" title="代码">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="http://www.joshuakgoldberg.com/"><img src="https://avatars.githubusercontent.com/u/3335181?v=4?s=100" width="100px;" alt="Josh Goldberg ✨"/><br /><sub><b>Josh Goldberg ✨</b></sub></a><br /><a href="#tool-JoshuaKGoldberg" title="工具">🔧</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3AJoshuaKGoldberg" title="Bug报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=JoshuaKGoldberg" title="代码">💻</a> <a href="#infra-JoshuaKGoldberg" title="基础设施(托管、构建工具等)">🚇</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=JoshuaKGoldberg" title="文档">📖</a> <a href="#maintenance-JoshuaKGoldberg" title="维护">🚧</a> <a href="#ideas-JoshuaKGoldberg" title="想法、规划与反馈">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/kendallgassner"><img src="https://avatars.githubusercontent.com/u/15275462?v=4?s=100" width="100px;" alt="Kendall Gassner"/><br /><sub><b>Kendall Gassner</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=kendallgassner" title="代码">💻</a> <a href="#maintenance-kendallgassner" title="维护">🚧</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/KristjanESPERANTO"><img src="https://avatars.githubusercontent.com/u/35647502?v=4?s=100" width="100px;" alt="Kristjan ESPERANTO"/><br /><sub><b>Kristjan ESPERANTO</b></sub></a><br /><a href="#ideas-kristjanesperanto" title="想法、规划与反馈">🤔</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Akristjanesperanto" title="错误报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=kristjanesperanto" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/nschonni"><img src="https://avatars.githubusercontent.com/u/1297909?v=4?s=100" width="100px;" alt="Nick Schonning"/><br /><sub><b>Nick Schonning</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=nschonni" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sirugh"><img src="https://avatars.githubusercontent.com/u/1278869?v=4?s=100" width="100px;" alt="Stephen"/><br /><sub><b>Stephen</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=sirugh" title="代码">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://hyoban.cc"><img src="https://avatars.githubusercontent.com/u/38493346?v=4?s=100" width="100px;" alt="Stephen Zhou"/><br /><sub><b>Stephen Zhou</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Ahyoban" title="错误报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=hyoban" title="代码">💻</a> <a href="#ideas-hyoban" title="想法、规划与反馈">🤔</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=hyoban" title="文档">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://ota-meshi.github.io/"><img src="https://avatars.githubusercontent.com/u/16508807?v=4?s=100" width="100px;" alt="Yosuke Ota"/><br /><sub><b>Yosuke Ota</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Aota-meshi" title="错误报告">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=ota-meshi" title="代码">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/b3rnhard"><img src="https://avatars.githubusercontent.com/u/10774404?v=4?s=100" width="100px;" alt="b3rnhard"/><br /><sub><b>b3rnhard</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Ab3rnhard" title="错误报告">🐛</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END --> <!-- spellchecker: enable -->

致谢

非常感谢 @zetlen 创建了这个包的初始版本和核心基础架构!💖

💙 本包是使用 create-typescript-app 模板创建的。

编辑推荐精选

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

下拉加载更多