如何为"linebreak-style"编写ESLint规则,根据Windows或Unix进行更改?

Rav*_*rat 32 javascript unix windows line-endings eslint

众所周知,Windows中使用的换行符(新行)通常是回车符(CR)后跟换行符(LF)即(CRLF),而Linux和Unix使用简单的换行符(LF)

现在,在我的情况下,我的构建服务器使用支持Linux和Unix格式,所以,下面的规则在构建服务器上完美地工作:

linebreak-style: ["error", "unix"]
Run Code Online (Sandbox Code Playgroud)

但我正在Windows上进行开发,我需要更新每个git pull/git push的规则,如下所示,

linebreak-style: ["error", "windows"]
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法编写通用的换行符式规则来支持这两种环境,Linux/Unix和Windows?

注意:我正在使用ECMAScript6 [js],WebStorm [ide]进行开发

任何解决方案/建议将受到高度赞赏.谢谢!

Stu*_*Stu 40

我花时间试图找到如何关闭linkbreak风格并丢失它由于恢复我的一些代码,我认为其他人也喜欢这样.

.eslintrc文件中,您还可以设置linebreak-style0其关闭换行符特点:

module.exports = {
  extends: 'google',
  quotes: [2, 'single'],
  globals: {
    SwaggerEditor: false
  },
  env: {
    browser: true
  },
  rules:{
    "linebreak-style": 0   // <----------
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 您永远不应该做的事情,尤其是当您不是唯一的开发人员时;) (6认同)
  • 不是解决办法,只是隐藏痛苦。 (5认同)

vit*_*bal 26

eslint配置文件可以是导出配置对象的常规.js文件(即,不是JSON,但是带有逻辑的完整JS).

这意味着您可以linebreak-style根据当前环境(或您可以想到的任何其他JS逻辑)更改规则的配置.

例如,要linebreak-style在节点环境为"prod"时使用其他配置:

module.exports = {
    "root": true,
    "parserOptions": {
        "sourceType": "module",
        "ecmaVersion": 6
    },
    "rules": {
        // windows linebreaks when not in production environment
        "linebreak-style": ["error", process.env.NODE_ENV === 'prod' ? "unix" : "windows"]
    }
};
Run Code Online (Sandbox Code Playgroud)

用法示例:

$ NODE_ENV=prod node_modules/.bin/eslint src/test.js

src/test.js
  1:25  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  2:30  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  3:36  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  4:26  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  5:17  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  6:50  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  7:62  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  8:21  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style

? 8 problems (8 errors, 0 warnings)

$ NODE_ENV=dev node_modules/.bin/eslint src/test.js
$ # no errors
Run Code Online (Sandbox Code Playgroud)

  • 基于这个答案,我转而检测平台的正常行,而不是必须指定环境,所以:`"linebreak-style":["error",(require("os").EOL ==="\r \n"?""windows":"unix")]` (9认同)

thi*_*ign 10

在您的.eslintrc.js

"rules": {
  "linebreak-style": ["error", (process.platform === "win32" ? "windows" : "unix")], // /sf/ask/2738011251/
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:如何使用 Node.js 确定当前的操作系统


CPH*_*hon 10

更好的选择

.editorconfigend_of_line

.editorconfig文件中添加end_of_line规则:

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

EditorConfig是当今大多数代码编辑器的扩展,它可以更改刚刚保存的文件的内容。此规则强制要求开发人员每次保存文件时,所有行结尾始终保持Unix 一致( )(注意: MacO 不再使用=>)。为了强制Windows行结尾 ( ) 使用。\n\rcr\r\ncrlf

此选项更可取,因为它避免了在项目存储库(版本控制)中记录所有行结束更改。

不是最佳选择...

正如EditorConfig 注释中提到的:

如果您想在不同操作系统之间使用本机行结尾,最好不要设置此选项并将该任务留给 VCS!将来我们可能会为此场景添加一个像 native 这样的值(参见#226)。

这将替代已接受的答案的解决方案:

"linebreak-style": process.env.NODE_ENV === 'prod' ? "unix" : "windows"
Run Code Online (Sandbox Code Playgroud)

这仍然比完全禁用规则 ( "linebreak-style": 0) 更好:开发人员/贡献者可能不一致地在同一文件中使用他们首选的行结尾...


小智 7

.eslintc 用于 Windows 视觉工作室代码

{
  "env": {
    "node": true
  },
  "rules":{
    "linebreak-style": 0
  }
}
Run Code Online (Sandbox Code Playgroud)


Ray*_*aga 5

如果您在 Windows 上使用 Vs Code,请转到“.eslintrc.json”文件(或“.js”,具体取决于您在设置 ESLint 时选择的选项);该文件通常可以在项目的根文件夹中找到;并在规则下添加换行选项以使用 Windows CRLF,如下所示:

"rules": {
    "linebreak-style": ["error", "windows"]
}
Run Code Online (Sandbox Code Playgroud)

保存文件,当您返回 JavaScript 文件时,所有那些讨厌的红线都会消失。


sea*_*ong 5

有一些答案正在讨论.eslintrc,其中一个甚至建议完全关闭该规则。

但是,我更喜欢将 VCS 设置更改为 checkoutLF而不是CRLF. 假设即使在 Windows 环境中,现代 IDE 也应该处理得LF很好。缺点是某些 Windows 软件(例如记事本)不喜欢它。但这样,如果您的换行样式不正确,您将会收到警告。即使 VCS 配置错误,人们也不太可能犯下错误的换行样式。只需运行git config --global core.autocrlf false或按照How do I Force git to use LF instead of CR+LF under windows?上的说明进行操作即可。

无论如何,通常不鼓励关闭该规则,因为这会影响其他团队成员,除非您得到所有​​团队的同意。