【发布时间】:2021-10-08 21:30:07
【问题描述】:
我是 Svelte 的新手,但到目前为止我很喜欢它。我已经使用 Svelte 和 TypeScript 编写了一个简单的井字游戏应用程序来练习它,现在我正在添加我喜欢的工具。我通常使用组合的 eslint/prettier 设置,依靠 eslint-plugin-prettier 将两者结合在一起。但是,对于 Svelte,这行不通。
澄清一下,ESLint 本身就可以正常工作。 Prettier 本身就可以正常工作。但是,当我将它们结合起来时,问题就出现了。
TypeScript
所有这些场景都使用这个 TypeScript 配置:
{
"extends": "@tsconfig/svelte/tsconfig.json",
"compilerOptions": {
"strict": true
},
"include": ["src/**/*"],
"exclude": ["node_modules/*", "__sapper__/*", "public/*"]
}
独立 ESLint
这是我的.eslintrc.js,用于独立运行 eslint:
module.exports = {
parser: '@typescript-eslint/parser',
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking'
],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
extraFileExtensions: ['.svelte']
},
env: {
es6: true,
browser: true
},
overrides: [
{
files: ['*.svelte'],
processor: 'svelte3/svelte3'
}
],
settings: {
'svelte3/typescript': require('typescript'),
// ignore style tags in Svelte because of Tailwind CSS
// See https://github.com/sveltejs/eslint-plugin-svelte3/issues/70
'svelte3/ignore-styles': () => true
},
plugins: ['svelte3', '@typescript-eslint'],
ignorePatterns: ['node_modules']
};
我用eslint --fix './src/**/*.{js,ts,svelte}' 运行它,它运行良好。
独立更漂亮
这是我的.prettierrc.js,用于独立运行 Prettier:
module.exports = {
arrowParens: 'always',
singleQuote: true,
printWidth: 90,
plugins: ['prettier-plugin-svelte'],
semi: true,
svelteSortOrder: 'options-styles-scripts-markup',
svelteStrictMode: false,
svelteBracketNewLine: true,
svelteIndentScriptAndStyle: true,
trailingComma: 'none',
tabWidth: 4,
useTabs: true,
jsxBracketSameLine: false,
quoteProps: 'as-needed',
bracketSpacing: true,
endOfLine: 'lf'
}
我用prettier --write ./src 运行它,它运行良好。
结合了 ESLint 和 Prettier
我的 Prettier 配置保持不变,这里是修改后的 ESLint 配置:
module.exports = {
parser: '@typescript-eslint/parser',
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'plugin:prettier/recommended'
],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
extraFileExtensions: ['.svelte']
},
env: {
es6: true,
browser: true
},
overrides: [
{
files: ['*.svelte'],
processor: 'svelte3/svelte3'
}
],
settings: {
'svelte3/typescript': require('typescript'),
// ignore style tags in Svelte because of Tailwind CSS
// See https://github.com/sveltejs/eslint-plugin-svelte3/issues/70
'svelte3/ignore-styles': () => true
},
plugins: ['svelte3', '@typescript-eslint'],
ignorePatterns: ['node_modules'],
rules: {
'prettier/prettier': ['error', {}, { usePrettierrc: true }],
}
};
我使用eslint --fix './src/**/*.{js,ts,svelte}' 运行它,但它失败并出现以下错误:
2 | import Stats from "./components/Stats.svelte";
3 |
> 4 | {Board,Stats;}
| ^
错误来自 Svelte 组件及其中的导入语句。下面是 Svelte 组件中那几行的样子。您会注意到上面的第 4 行实际上并不存在于我的源代码中:
<script lang="ts">
import Board from "./components/Board.svelte";
import Stats from "./components/Stats.svelte";
</script>
结论
据我所知,当 prettier 解析出 prettier 无法识别的形式的内容时。我想知道有没有办法解决这个问题?
非常感谢您。
【问题讨论】:
-
没有帮助评论:我只是放弃 eslint。我总觉得 ts 和 prettier 之间不协调。请问,你喜欢 eslint 的哪些特殊功能,但 ts/prettier 没有涵盖?
标签: typescript eslint svelte prettier