Eslint - 脚本和模块的 SourceType 混合体
Eslint - SourceType mixture of script and module
我们开始混入一些 es6 模块,当你使用 import/export 而不使用 sourceType: script
时,eslint 会公正地抱怨
Parsing error: 'import' and 'export' may appear only with 'sourceType: module'at line 1 col 1
但是,如果我将 sourceType 更改为模块,那么每个具有 'use strict' 的文件;在顶部被标记为模块中不需要 use strict。
模块是我的 jsx 文件,我的 js 文件是 POJ,所以我需要两个 sourceTypes 才能运行。
关于如何强制 eslint 与模块和脚本一起工作有什么想法吗?我想避免 运行 两个单独的 eslintrc 文件和规则集,只是让一个是模块,另一个是脚本。
只要你的脚本有一个扩展名而你的模块有不同的扩展名,那么你就可以有两种不同的配置。
// .eslintrc.json
{
// ...
// Your normal config goes here
// ...
}
用 eslint .
整理您的普通脚本,就像您一直在做的那样。它默认为 sourceType: "script"
,默认拉取 .eslintrc.json
,默认只检查 *.js
个文件。
// .eslintrc.modules.json
{
"extends": "./.eslintrc.json",
"parserOptions": {
"sourceType": "module"
},
// You can have additional module-specific config here if you want
}
现在您可以使用 eslint --config .eslintrc.modules.json --ext .jsx .
只对模块进行 lint,这将拉取模块配置,这只是正常 .eslintrc.json
的扩展,它只会对 *.jsx
个文件。
我在根文件夹中创建了带有选项 sourceType
的主文件:script
。
在文件夹中时 ./front file .eslintrc.json
:
{
"extends": "../.eslintrc.json",
"parserOptions": {
"sourceType": "module"
}
}
eslint 4.1.0+ 现在有一个更好的方法:
module.exports = {
overrides: [
{
files: [ "rollup.config.js" ],
parserOptions: { sourceType: "module" },
}
]
};
您还可以在 overrides 部分中按 glob 更改规则或任何您想要的内容。
有一种方法既能吃蛋糕又能吃蛋糕,让所有文件都带有 .js
扩展名,同时消除 sourceType
文件的歧义。
首先,像其他答案所建议的那样,为备用文件扩展名添加覆盖:
{ "overrides":
[
{ "files": [ "*.js" ]
, "excludedFiles": "*unambiguous.js"
, "processor": "plugin-name/disambiguate" }
,
{ "files": [ "*.mjs" ]
, "parserOptions":
{ "sourceType": "module" } }
] }
神奇的是:像这样制作一个超级简单的 ESLint 插件
var module_regex = /\bimport\b|\bexport\b/
module .exports =
{ processors:
{ disambiguate:
{ preprocess: (_source_string, _file_path) => {
if (module_regex .test (_source_string)) {
return [
{ text: _source_string
, filename: 'unambiguous.mjs' } ] }
else {
return [
{ text: _source_string
, filename: 'unambiguous.js' } ] } } } } }
使用此设置,在 ESLint 插件消除您的 Javascript 代码歧义后,ESLint 可以理解您的 sourceType
就像它应该的那样,不需要更改 .js
文件扩展名。
这非常适合 ESLint configuration/plugin 模型,作为一个插件,您甚至可以将 "overrides"
放在插件配置中,这样您所有的基本配置需要做的就是包含插件,以消除歧义。
可能会考虑在某个时候将它放在 npm 上,希望这对某人有所帮助。
我们开始混入一些 es6 模块,当你使用 import/export 而不使用 sourceType: script
时,eslint 会公正地抱怨Parsing error: 'import' and 'export' may appear only with 'sourceType: module'at line 1 col 1
但是,如果我将 sourceType 更改为模块,那么每个具有 'use strict' 的文件;在顶部被标记为模块中不需要 use strict。
模块是我的 jsx 文件,我的 js 文件是 POJ,所以我需要两个 sourceTypes 才能运行。
关于如何强制 eslint 与模块和脚本一起工作有什么想法吗?我想避免 运行 两个单独的 eslintrc 文件和规则集,只是让一个是模块,另一个是脚本。
只要你的脚本有一个扩展名而你的模块有不同的扩展名,那么你就可以有两种不同的配置。
// .eslintrc.json
{
// ...
// Your normal config goes here
// ...
}
用 eslint .
整理您的普通脚本,就像您一直在做的那样。它默认为 sourceType: "script"
,默认拉取 .eslintrc.json
,默认只检查 *.js
个文件。
// .eslintrc.modules.json
{
"extends": "./.eslintrc.json",
"parserOptions": {
"sourceType": "module"
},
// You can have additional module-specific config here if you want
}
现在您可以使用 eslint --config .eslintrc.modules.json --ext .jsx .
只对模块进行 lint,这将拉取模块配置,这只是正常 .eslintrc.json
的扩展,它只会对 *.jsx
个文件。
我在根文件夹中创建了带有选项 sourceType
的主文件:script
。
在文件夹中时 ./front file .eslintrc.json
:
{
"extends": "../.eslintrc.json",
"parserOptions": {
"sourceType": "module"
}
}
eslint 4.1.0+ 现在有一个更好的方法:
module.exports = {
overrides: [
{
files: [ "rollup.config.js" ],
parserOptions: { sourceType: "module" },
}
]
};
您还可以在 overrides 部分中按 glob 更改规则或任何您想要的内容。
有一种方法既能吃蛋糕又能吃蛋糕,让所有文件都带有 .js
扩展名,同时消除 sourceType
文件的歧义。
首先,像其他答案所建议的那样,为备用文件扩展名添加覆盖:
{ "overrides":
[
{ "files": [ "*.js" ]
, "excludedFiles": "*unambiguous.js"
, "processor": "plugin-name/disambiguate" }
,
{ "files": [ "*.mjs" ]
, "parserOptions":
{ "sourceType": "module" } }
] }
神奇的是:像这样制作一个超级简单的 ESLint 插件
var module_regex = /\bimport\b|\bexport\b/
module .exports =
{ processors:
{ disambiguate:
{ preprocess: (_source_string, _file_path) => {
if (module_regex .test (_source_string)) {
return [
{ text: _source_string
, filename: 'unambiguous.mjs' } ] }
else {
return [
{ text: _source_string
, filename: 'unambiguous.js' } ] } } } } }
使用此设置,在 ESLint 插件消除您的 Javascript 代码歧义后,ESLint 可以理解您的 sourceType
就像它应该的那样,不需要更改 .js
文件扩展名。
这非常适合 ESLint configuration/plugin 模型,作为一个插件,您甚至可以将 "overrides"
放在插件配置中,这样您所有的基本配置需要做的就是包含插件,以消除歧义。
可能会考虑在某个时候将它放在 npm 上,希望这对某人有所帮助。