如何编写“linebreak-style”的ESLint规则,根据Windows或Unix的不同而变化?

vshtjzan  于 2022-11-04  发布在  Unix
关注(0)|答案(9)|浏览(377)

我们都知道,Windows中使用的换行符(新行)通常是回车符(CR)后跟换行符(LF),即(CRLF),而Linux和Unix使用简单的换行符(LF)
现在,在我的例子中,我的构建服务器使用支持Linux和Unix,因此,下面的规则在构建服务器上运行良好:

linebreak-style: ["error", "unix"]

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

linebreak-style: ["error", "windows"]

那么,有没有办法编写一个通用的 * linebreak样式 * 规则来支持Linux/Unix和Windows这两种环境呢?

注意:我正在使用ECMAScript 6 [js]、WebStorm[ide]进行开发

任何解决方案/建议将不胜感激。谢谢!

ohfgkhjo

ohfgkhjo1#

我花了时间试图找到如何关闭linkbreak风格,并失去了它,由于恢复我的一些代码,我认为其他人我喜欢有这个以及。
.eslintrc文件中,您还可以将linebreak-style设置为0,这将关闭linebreak功能:

module.exports = {
  extends: 'google',
  quotes: [2, 'single'],
  globals: {
    SwaggerEditor: false
  },
  env: {
    browser: true
  },
  rules:{
    "linebreak-style": 0   // <----------
  }
};
sq1bmfud

sq1bmfud2#

eslint配置文件可以是一个常规的.js文件(即,不是JSON,而是带有逻辑的完整JS),用于导出配置对象。
这意味着您可以根据当前环境(或您能想到的任何其他JS逻辑)更改linebreak-style规则的配置。
例如,要在节点环境为“prod'时使用不同的linebreak-style配置,请执行以下操作:

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"]
    }
};

示例用法:

$ 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
zrfyljdw

zrfyljdw3#

在您的.eslintrc.js中:

"rules": {
  "linebreak-style": ["error", (process.platform === "win32" ? "windows" : "unix")], // https://stackoverflow.com/q/39114446/2771889
}

另请参阅:How do I determine the current operating system with Node.js

lp0sw83n

lp0sw83n4#

更好的选择

.编辑器配置end_of_line

在.editorconfig文件中添加end_of_line规则:

[*]
end_of_line= lf

EditorConfig是当今大多数代码编辑器的扩展,它会更改您刚刚保存的文件的内容。此规则强制要求每次开发人员保存文件时,所有行尾始终unix一致\n)(注意:MacOs no longeruses \r => cr)。若要胁迫使用视窗行尾(\r\n),请使用crlf
此选项是首选的,因为它避免了将所有行尾更改记录在项目的资源库中(版本控制)。
不是最佳选择...
正如EditorConfig注解中提到的:
如果您希望在不同的操作系统之间使用本机行尾,最好不要设置此选项,而将该任务留给VCS!将来我们可能会为此方案添加一个值,如native(cf #226)。
这将是accepted answer解决方案的替代品:

"linebreak-style": process.env.NODE_ENV === 'prod' ? "unix" : "windows"

这仍然比完全禁用规则("linebreak-style": 0)好:开发人员/贡献者可能会在同一文件中使用他们喜欢的行尾。

4szc88ey

4szc88ey5#

用于Windows visualstudio代码的.eslintc

{
  "env": {
    "node": true
  },
  "rules":{
    "linebreak-style": 0
  }
}
uurv41yg

uurv41yg6#

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

"rules": {
    "linebreak-style": ["error", "windows"]
}

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

oxalkeyp

oxalkeyp7#

有几个答案在玩.eslintrc,其中一个甚至建议完全关闭规则。
但是,我更喜欢将VCS设置更改为checkout LF,而不是CRLF。现代的IDE应该可以很好的处理LF。缺点是一些windows软件比如记事本不喜欢它。但是这样的话,如果你有不正确的换行符样式,你会被警告。即使VCS配置错误,人们也不太可能提交错误的换行符样式。
无论如何,通常不鼓励关闭该规则,因为这会影响其他团队成员,除非您得到团队所有成员的同意。

ffx8fchx

ffx8fchx8#

在我的例子中,VS代码的默认设置是换行符CRLF,因为它是新安装的。我必须通过以下方式更改它:Ctrl + Shift + P以打开命令调色板并搜索:
更改行结束序号
您可以在此处将其切换为LF

6pp0gazn

6pp0gazn9#

更改换行符样式的ESLint规则所需的配置文件的位置可能会发生变化,具体取决于您要更改的是本地设置、项目设置还是全局设置。它首先搜索本地设置,这将覆盖树中更靠上的设置,因此,在树的顶部进行更改可向下传播到全局设置
我使用的是Airbnb风格,我的全球设置位于:js:在您的计算机上运行的应用程序。
如果您不确定文件的位置,您可以始终搜索包含与设置相关的文本的文件列表,在Linux上要查找具有换行符设置的所有文件,请导航到安装ESLint的文件夹,然后用途:

grep -r linebreak

相关问题