为什么我不断收到Delete'cr'[prettier / prettier]?

bie*_*ier 26 reactjs visual-studio-code prettier eslintrc

我在Prettier 1.7.2和Eslint 1.7.0中使用vscode。每换行后,我得到:

[eslint] Delete 'cr' [prettier/prettier]
Run Code Online (Sandbox Code Playgroud)

这是.eslintrc.json:

{
"extends": ["airbnb", "plugin:prettier/recommended"],
"env": {
"jest": true,
"browser": true
},
"rules": {
"import/no-extraneous-dependencies": "off",
"import/prefer-default-export": "off",
"no-confusing-arrow": "off",
"linebreak-style": "off",
"arrow-parens": ["error", "as-needed"],
"comma-dangle": [
"error",
{
"arrays": "always-multiline",
"objects": "always-multiline",
"imports": "always-multiline",
"exports": "always-multiline",
"functions": "ignore"
}
],
"no-plusplus": "off"
},
"parser": "babel-eslint",
"plugins": ["react"],
"globals": {
"browser": true,
"$": true,
"before": true,
"document": true
}
}
Run Code Online (Sandbox Code Playgroud)

.prettierrc

{
    "printWidth": 80,
    "tabWidth": 2,
    "semi": true,
    "singleQuote": true,
    "trailingComma": "es5",
    "bracketSpacing": true,
    "jsxBracketSameLine": false,
}
Run Code Online (Sandbox Code Playgroud)

如何摆脱这个错误?

小智 119

在我的 Windows 机器上,我通过在当前项目目录中存在rules.eslintrc.js文件对象中添加以下代码片段来解决这个问题。

    "prettier/prettier": [
      "error",
      {
        "endOfLine": "auto"
      },
    ],
Run Code Online (Sandbox Code Playgroud)

这也适用于我的 Mac


Fra*_*Guo 46

如您所见,将其添加到 .eslintrc 中即可!

在此输入图像描述

"prettier/prettier": ["error", {
    "endOfLine": "auto" }
],
Run Code Online (Sandbox Code Playgroud)

  • 如果您粘贴可搜索和复制/粘贴的源代码,而不是图像,这将是一个更好的答案:-) (17认同)

Vah*_*Run 38

尝试"endOfLine":"auto"在.prettierrc文件中(在对象内部)设置

或设置

"prettier/prettier": ["error", {
     ..
    "endOfLine":"auto"
     ..
  }],
Run Code Online (Sandbox Code Playgroud)

在eslintrc文件的rules对象中。

如果您使用的是Windows机器,则可以基于您的git配置将“ endOfLine”设置为“ crlf”。

  • 对于像我这样的新手来说,这就是应该做的事情。打开根目录(“frontend”)中的“.eslintrc.json”。更改后,它将如下所示: `{ "extends": ["react-app", "prettier"], "plugins": ["prettier"], "rules": { "prettier/prettier": ["error ", { "endOfLine": "自动" }] } } ` (34认同)
  • 仅供参考:需要重新启动才能使更改在 VSCode 上生效。 (22认同)
  • 我的猜测是您可能需要在 VS Code 中使用 Prettier 扩展。prettierrc 仅在这种情况下有效。 (8认同)
  • 更改`.eslintrc`文件对我有用,但对`.prettierrc`文件无效。不知道为什么或有什么区别(我是OP上所有标签的新手)。 (3认同)
  • 在 Windows 机器上将行尾序列从“CRLF”更改为“LF”对我有用 (3认同)
  • 尝试这个命令`npm run lint -- --fix` (3认同)
  • 用 `endOfLine: 'auto'` 更新 .prettierrc.js 对我来说在 windows + vs code 上有效。更新 .eslintrc.js 不起作用 (2认同)

小智 21

在副角色的 .eslintrc.json 文件中添加此代码将解决此问题

      "rules": {
    "prettier/prettier": ["error",{
      "endOfLine": "auto"}
    ]

  }
Run Code Online (Sandbox Code Playgroud)


小智 19

在VSCode上更改此设置。

在此处输入图片说明

  • 除了在 VSCode 中将“CRLF”更改为“LF”之外,“git”可能会在后台进行自动转换。如果您在安装时选择“checkout Windows-style”,它会将您克隆的源代码转换为“CRLF”。因此,重新安装 `git` 并选择 `checkout as-is, commit Unix-style` 将修复它。 (6认同)
  • 这对我有用。我确实尝试了其他方法,包括编辑配置文件,但都不起作用。 (5认同)
  • 这将解决问题,但仅在您使用CRLF打开其他源文件之前。以上答案更为有效。 (3认同)

Tri*_*awn 15

在 .eslintrc 文件中添加以下内容:

  • extends: ['prettier']plugins: ['prettier']

  • rules: {'prettier/prettier': ['error', {endOfLine: 'auto'}]}

在 .prettierrc 中删除此内容:

  • endOfLine: 'auto'

这个对我有用。


小智 14

npm run lint -- --fix

运行这个命令这对我有用


Rad*_*asu 13

我知道这是旧的,但我刚刚在我的团队中遇到了这个问题(一些 mac,一些 linux,一些 windows,所有的 vscode)。

解决方案是设置以 vscode 的设置结尾的行:

.vscode/settings.json

{
    "files.eol": "\n",
}
Run Code Online (Sandbox Code Playgroud)

https://qvault.io/2020/06/18/how-to-get-consistent-line-breaks-in-vs-code-lf-vs-crlf/


Ham*_*eed 12

固定 - 我的 .eslintrc.js 看起来像这样:

module.exports = {
  root: true,
  extends: '@react-native-community',
  rules: {'prettier/prettier': ['error', {endOfLine: 'auto'}]},
};
Run Code Online (Sandbox Code Playgroud)


kok*_*478 12

解决方案

git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

全局配置后,需要再次拉取代码。

问题的根本原因:

罪魁祸首是git,一个配置属性core.autocrlf

由于历史原因,文本文件的换行符 onwindowslinux是不同的。

  • Windows换行时,回车CR(carriage-return character)与换行同时使用LF(linefeed character)
  • Mac并且Linux只使用换行符LF
  • 旧版本Mac使用回车CR

因此,在不同的系统中创建和使用文本文件时,会出现不兼容的问题。

当我在 上克隆代码时Windows,默认autocrlftrue,然后文件的每一行都会自动转换为CRLF. 如果您不对文件进行任何更改,请eslint删除CRpre-commit因为git自动转换CRLFLF.

参考

https://developpaper.com/solution-to-delete-%E2%90%8Deslint-prettier-prettier-error/

  • 该解决方案将破坏跨平台开发 - 您可以将混合或 LF/CR/CRLF 推送到存储库。我建议不要使用它,除非您单独工作,并且只在一种类型的操作系统(Linux/Mac/Windows)上工作。对于团队来说,一个好的配置是使用 autocrlf=true 并配置 linting 工具以尊重其运行平台的 EOL 字符,如其他答案(“endOfLine”:“auto”)中所示。更糟糕的是,您建议全局设置 autocrlf=false ,我认为如果需要这样做,则应该始终针对每个存储库,否则您的所有新存储库从一开始就有问题。 (5认同)

小智 11

修正:我的 eslintrc.js 一些规则看起来像这样:

rules: {
    'prettier/prettier': ['error', { "endOfLine": "auto"}, { usePrettierrc: true }],  // Use our .prettierrc file as source
    'react/react-in-jsx-scope': 'off',
    'react/prop-types': 'off',
    'simple-import-sort/imports': 'error',
    "simple-import-sort/exports": "error"
}
Run Code Online (Sandbox Code Playgroud)


Wak*_*eng 10

我正在使用 git+vscode+windows+vue,阅读 eslint 文档后:https ://eslint.org/docs/rules/linebreak-style

最后修复它:

添加*.js text eol=lf.gitattributes

然后运行 vue-cli-service lint --fix


Hak*_*kan 10

尝试这个。这个对我有用:

纱线运行 lint --fix

或者

npm 运行 lint -- --fix


小智 10

在 .eslintrc 文件中添加以下规则,然后重新启动您的项目。

rules: {
    'prettier/prettier': ['error', { "endOfLine": "auto"}, { usePrettierrc: true }],  
}
Run Code Online (Sandbox Code Playgroud)


Muh*_*Ali 8

在“.eslintrc.js”文件中添加以下

rules: {'prettier/prettier': ['error', {endOfLine: 'auto'}]}
Run Code Online (Sandbox Code Playgroud)

例如

在此输入图像描述


Vin*_*nce 7

将此添加到您的.prettierrc文件并打开VSCODE

"endOfLine": "auto"
Run Code Online (Sandbox Code Playgroud)


Had*_*azi 7

如果上面的代码对您不起作用,请尝试以下两个步骤。

1. 在文件 .eslintrc.json里面的角色对象中添加此代码将解决此问题

 "prettier/prettier": ["error",{
      "endOfLine": "auto"}
    ]
Run Code Online (Sandbox Code Playgroud)

2 更改开发服务器 --fix

npm run dev
Run Code Online (Sandbox Code Playgroud)

npm run dev --fix
Run Code Online (Sandbox Code Playgroud)

或者

npm run lint -- --fix
yarn run lint -- --fix
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是**内部规则对象**?如果是这样,请解决这个问题 (2认同)

小智 7

我在 Nest js 应用程序中遇到了同样的问题。将以下代码添加到.eslintrc.js规则然后运行yarn run lint --fix修复了问题。

'prettier/prettier': [
  'error',
  {
    endOfLine: 'auto',
  },
],
Run Code Online (Sandbox Code Playgroud)

我的.eslintrc.js规则看起来像这样..

 rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'prettier/prettier': [
  'error',
  {
    endOfLine: 'auto',
  },
],
Run Code Online (Sandbox Code Playgroud)

},


Shr*_*oel 7

解决方案

1.禁用自动转换git设置

git --全局配置 core.autocrlf false

2.删除旧的缓存数据

git rm --cached -r 。

3.重置git文件

git重置——硬


Kee*_*uva 7

如果您已经检查过代码

git config --global core.autocrlf input 


git rm --cached -r . 


git reset --hard
Run Code Online (Sandbox Code Playgroud)


Eli*_*ias 6

就我而言,我在 Mac 中使用 Windows 操作系统和 git 代码支持,并转换为 CRLF,在 cmd 提示符下运行命令以停止文件转换为 CRLF: 在此输入图像描述

git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)

再次签出代码并再次打开 Visual Studio Code 并再次运行脚本。这对我有用。


Raf*_*edo 6

我尝试了这里的所有内容,对我来说,我需要通过图标扩展>更漂亮>小引擎>扩展设置>更漂亮:行尾>设置为自动来管理更漂亮的配置扩展。

在我的 settings.json 中添加这两行后

"eslint.run": "onSave",
"editor.formatOnSave": true,
Run Code Online (Sandbox Code Playgroud)

我能够在 .eslintrc.js 规则中使用下面的配置。

"prettier/prettier": ["error", {
    "endOfLine":"auto"
}],
Run Code Online (Sandbox Code Playgroud)


Dar*_*ans 6

检查底部 VS Code 状态栏的右侧,其中显示了行和列、空格、文本编码(UTF-8 等)等信息。您应该会看到一个Select End Of Line Sequence状态显示(LFCRLF),您可以单击该显示进行更改。确保您没有手动将其更改为与您希望 Prettier 使用的内容冲突的内容。


ßia*_*rol 6

最好的解决方案是使用.editorconfig。尤其是当您与具有不同类型操作系统的团队合作时。因此在 .eslintrc 中禁用 prettier 根本不是一个好的选择。

从 vscode 扩展安装 .editorconfig。在项目根目录中创建一个.editorconfig文件并将其添加到您的.gitignore文件中,这样就不会打扰您的队友。

将其添加到您的.editorconfig文件中或从文档中选择您需要的工作流程设置。

[*]
end_of_line = lf
Run Code Online (Sandbox Code Playgroud)

这会将您的文件自动保存为 EOL 类型,lf而不是crlf在 Windows 中。如果使用 mac,则反之亦然。或者取决于项目工作流程设置。

根本原因是windows默认是crlf。因此,每次您尝试创建文件时,您都会遇到这个更漂亮的Delete 'cr'错误。

此外

如果你从 git 获取的所有文件都包含Delete 'cr'.

  1. 删除您的项目
  2. 重新安装 git 并选择 按原样签出,提交 Unix 风格的行结尾
  3. 再次从存储库克隆您的项目
  4. 使用上面设置的 .editorconfig

  • 迄今为止最好的答案,谢谢 (2认同)

Bil*_*mad 6

rules: {
            "prettier/prettier": [
                "error",
                {
                    endOfLine: "auto",
                },
            ],
        }
Run Code Online (Sandbox Code Playgroud)

将其添加到项目的“ .eslintrc.js ”文件中后重新启动您的 VSCODE

并且还添加

module.exports = { 
  endOfLine: 'auto',
  // keep other values 
}
Run Code Online (Sandbox Code Playgroud)

在您项目的“ .prettierrc.js ”中