不支持extends

prettier配置并不支持 extends 关键字,但是我们可以手动合并,比方说我们下载了一个配置包 @repo/config-prettier,我们可以如下继承到自己项目中

// prettier.config.js
const configPrettier = require('@repo/config-prettier'); module.exports = {
...configPrettier,
};

配置包使用了三方库

// @repo/config-prettier的 index.js
export default {
tabWidth: 2, // 缩进2个空格
useTabs: false, // 缩进单位是否使用tab替代空格
semi: true, // 句尾添加分号
singleQuote: true, // 使用单引号代替双引号
printWidth: 10000,
plugins: ['./node_modules/prettier-plugin-sort-imports/dist/index.js'],
sortingMethod: 'lineLength',
sortingOrder: 'ascending',
};
// @repo/config-prettier的 package.json
{
"name": "@repo/config-prettier",
"version": "0.0.1",
"description": "Prettier configuration for the monorepo",
"main": "base.js",
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"prettier-plugin-sort-imports": "^1.8.7"
}
}

使用者需要安装吗?

那我自己的项目还需要安装prettier-plugin-sort-imports 吗?

是的,你还是需要在你的项目中单独安装 prettier-plugin-sort-imports,即使在 @repo/config-prettier 中引用了该插件。

解释原因:

• Prettier 插件的加载方式:Prettier 插件(如 prettier-plugin-sort-imports)必须被安装在使用该配置的项目中,即使你在 @repo/config-prettier 中通过相对路径引用了插件,Prettier 还是会寻找项目中 node_modules 中的插件,而不是通过依赖关系的路径自动加载。

• plugins 字段:在 Prettier 配置中使用 plugins 指定插件时,Prettier 会依赖当前项目的 node_modules 中的插件。所以,即使你在 @repo/config-prettier 配置中引用了插件路径,仍然需要在项目中安装插件。

解决办法

你不能要求每个使用者,都如你所愿“乖乖安装 prettier-plugin-sort-imports”,所以你可以这么做:将配置包@repo/config-prettier 的 package.json 改为

// @repo/config-prettier的 package.json
{
"name": "@repo/config-prettier",
// ...
"peerDependencies": {
"prettier-plugin-sort-imports": "^1.8.7"
}
}

这是因为,用户在安装某个依赖的时候会自动安装它 peerDependencies 里的包

找不到 plugin 的 path

@repo/config-prettier 是我们封装的一个常用prettier的 npm 包,在新项目中我们这么使用

// prettier.config.js
const configPrettier = require('@repo/config-prettier'); module.exports = {
...configPrettier,
};

但这就会出现一个问题:

在@repo/config-prettier 的封装中,针对插件prettier-plugin-sort-imports的引用, 虽然写了相对路径 ['./node_modules/prettier-plugin-sort-imports/dist/index.js'

但是在当前项目中进行prettier时,因prettier运行是在作用域是在跟目录,这会导致在使用者的 node_module里无法找到这个包,既

your project
|--node_modules
|-- @repo/config-prettier
| --node_modules
|--prettier-plugin-sort-imports

有两种办法解决,要么在使用的地方将其依赖提升,或者按照推荐的写法封装: 通过 require('xxx') 反向获取它当前的绝对路径

// @repo/config-prettier/index.js
const pluginPath = require.resolve('prettier-plugin-sort-imports'); module.exports = {
plugins: [pluginPath],
sortingMethod: "lineLength",
sortingOrder: "ascending",
};

prettier继承的更多相关文章

  1. eslint+prettier+husky+lint-staged 统一前端代码规范

    eslint+prettier+husky+lint-staged 统一前端代码规范 遵循编码规范和使用语法检测,可以很好的提高代码的可读性,可维护性,并有效的减少一些编码错误. 1.终极目标 团队中 ...

  2. 【JavaScript】ESlint & Prettier & Flow组合,得此三神助,混沌归太清

    Flow Flow的意义 Flow是faceBook开源的一个JavaScript静态类型检查工具,作用类似TypeScript,但是它不像TS那样是一门独立的语言,而是作为一个babel-plugi ...

  3. vscode, eslint, prettier, vetur冲突及解决

    这3工具都必须安装. 但是安装之后, 规则冲突又让人头疼. 讲下解决方案吧.一 从0开始1. 禁止工作区插件, 如下图:  2. 清空用户设置(Code–>首选项–>设置–>[右上角 ...

  4. Prettier - Code formatter使用

    更多VSCode插件使用请访问:VSCode常用插件汇总 Prettier - Code formatter这是一款 格式化js.css代码插件,暂不解释. Prettier是什么? Prettier ...

  5. 03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)

    书接上文.在团队协作中,为避免低级Bug.以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范.使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保 ...

  6. 前端规范之JS代码规范(ESLint + Prettier)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  7. 【vue3-element-admin】ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码规范

    前言 本文介绍 vue3-element-admin 如何通过ESLint 检测 JS/TS 代码.Prettier 格式化代码.Stylelint 检测 CSS/SCSS 代码和配置 EditorC ...

  8. javaScript的原型继承与多态性

    1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...

  9. JavaScript的继承实现方式

    1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...

  10. javascript中的继承与深度拷贝

    前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...

随机推荐

  1. python处理ppt文件,转换成图片或者pdf文件(获取目录下所有文件信息、文件名称分割、文档操作)

    把PPT每一页截图到公众号里推送可是个体力活,那就用python脚本去分解ppt,保存每一个为一张图片好了 需要用到"win32com.client"库 import win32c ...

  2. Java编程之面向对象

    一.面向对象 1.定义 (1)类:描述的是具有共性的一类事物 (2)对象:一个个具备了类的特点和功能的个体 (3)面向对象:要完成某件事,首先要先有对象,然后直接调用这个对象的响应功能 2.成员变量: ...

  3. 没错,Go 语言的函数参数没有引用传递方式

    这篇文章想浅浅地讲解 Go 语言函数参数传递的值拷贝. 一句话观点 Go语言中所有传递都是值传递,严格来说并不存在引用传递的概念.传递指针只是传递指针的值,并不是引用传递,只不过通过指针可以间接修改变 ...

  4. RMQ学习笔记

    RMQ学习笔记 前言:这个算法无论是从适配性还是长度来说都很有实力... 关于 RMQ RMQ 是英文 Range Maximum/Minimum Query 的缩写,表示区间最大(最小)值. 详细信 ...

  5. nexus私有仓库与maven集成

    首先搭建maven 下载maven,并解压,移动到/usr/local/,重命名为 maven-3.5.4 配置环境变量:vim /etc/profileexport MAVEN_HOME=/usr/ ...

  6. 47.9K star!全平台开源笔记神器,隐私安全首选!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "Joplin 是一款开源的笔记记录和待办事项应用,支持端到端加密同步,完美替代商 ...

  7. windows 配置jdk8环境变量

    JAVA_HOME: E:\Android\Java\jdk1.8.0_131 PATH: %JAVA_HOME\%bin 也可以只配置PATH就可以,如 E:\Android\Java\jdk1.8 ...

  8. API测试基础之http协议

    http简介: http(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP(传输控制协议)之上.它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应.请求和响应消息的头以ASC ...

  9. Web前端入门第 47 问:CSS @media 媒体查询不要只会视口宽度适配

    @media 媒体查询的出现解决了什么问题? 曾经,一个网页要兼容移动端和 PC 端,前端的代码复杂度嗖嗖嗖的飙升,需要使用多套代码对各种屏幕尺寸做适配. @media 的出现解决了 CSS 中无法适 ...

  10. (dify)如何使用dify自定义知识库【dify外部链接知识库】

    尝试dify自定义知识库 根据官网教程,可以从知识库的右上角外部知识库进行添加外部知识库 前往 "知识库" 页,点击右上角的 "外部知识库 API",轻点 &q ...