it-swarm.com.ru

Как я могу написать правило ESLint для "linebreak-style", меняющееся в зависимости от Windows или Unix?

Как все мы знаем, переносы строк (новая строка), используемые в Windows, обычно представляют собой возврат каретки (CR), за которым следует перевод строки (LF), т. Е. (CRLF), тогда как в Linux и Unix используется простой перевод строки (LF).

Теперь, в моем случае, мой сервер сборки поддерживает форматы Linux и Unix, поэтому на сервере сборки отлично работает следующее правило:

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

Но я занимаюсь разработкой для Windows, и мне нужно обновлять правило для каждого git pull/git Push, как показано ниже,

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

Итак, есть ли способ написать общее правило linebreak-style для поддержки обеих сред, Linux/Unix и Windows?

Примечание : Я использую ECMAScript6 [js], WebStorm [ide] для разработки

Любые решения/предложения будут высоко оценены. Спасибо! 

22
Ravindra Thorat

Файл конфигурации 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"]
    }
};

Пример использования:

$ 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
22
vitorbal

Я потратил время, пытаясь найти способ отключить стиль разрыва ссылок, и потерял его из-за возврата части своего кода, я думал, что другие тоже хотели бы иметь это. 

В файле .eslintrc вы также можете установить для linebreak-style значение 0, которое отключает функцию linebreak :

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

код .eslintc для Windows visualstudio

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

2
AndyC

Расположение файла конфигурации, необходимого для изменения правил ESLint для стиля разрыва строки, может изменяться в зависимости от того, хотите ли вы изменить локальные, проектные или глобальные параметры, он сначала ищет локальные, которые переопределяют те, которые находятся дальше по дереву, поэтому изменяйте в верхней части дерево для распространения вниз для глобального

Я использовал стиль airbnb, и мои глобальные настройки были расположены здесь: node_modules/eslint-config-airbnb-base/rules/style.js:

Если вы не уверены в местонахождении файла, вы всегда можете найти список файлов, содержащих текст, относящийся к настройкам, в Linux, чтобы найти все файлы с настройками переноса строки, перейдите в папку, где был установлен ESLint, и используйте:

grep -r linebreak
0
Leigh Mathieson

В вашем .eslintrc.js:

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

Смотрите также: Как определить текущую операционную систему с Node.js

0
thisismydesign