Spaces:
Sleeping
Sleeping
const path = require('path') | |
module.exports = (api, options) => { | |
if (options.lintOnSave) { | |
const extensions = require('./eslintOptions').extensions(api) | |
// Use loadModule to allow users to customize their ESLint dependency version. | |
const { resolveModule, loadModule } = require('@vue/cli-shared-utils') | |
const cwd = api.getCwd() | |
const eslintPkg = | |
loadModule('eslint/package.json', cwd, true) || | |
loadModule('eslint/package.json', __dirname, true) | |
// eslint-loader doesn't bust cache when eslint config changes | |
// so we have to manually generate a cache identifier that takes the config | |
// into account. | |
const { cacheIdentifier } = api.genCacheConfig( | |
'eslint-loader', | |
{ | |
'eslint-loader': require('eslint-loader/package.json').version, | |
eslint: eslintPkg.version | |
}, | |
[ | |
'.eslintrc.js', | |
'.eslintrc.yaml', | |
'.eslintrc.yml', | |
'.eslintrc.json', | |
'.eslintrc', | |
'.eslintignore', | |
'package.json' | |
] | |
) | |
api.chainWebpack(webpackConfig => { | |
const { lintOnSave } = options | |
const allWarnings = lintOnSave === true || lintOnSave === 'warning' | |
const allErrors = lintOnSave === 'error' | |
webpackConfig.module | |
.rule('eslint') | |
.pre() | |
.exclude | |
.add(/node_modules/) | |
.add(path.dirname(require.resolve('@vue/cli-service'))) | |
.end() | |
.test(/\.(vue|(j|t)sx?)$/) | |
.use('eslint-loader') | |
.loader(require.resolve('eslint-loader')) | |
.options({ | |
extensions, | |
cache: true, | |
cacheIdentifier, | |
emitWarning: allWarnings, | |
// only emit errors in production mode. | |
emitError: allErrors, | |
eslintPath: path.dirname( | |
resolveModule('eslint/package.json', cwd) || | |
resolveModule('eslint/package.json', __dirname) | |
), | |
formatter: loadModule('eslint/lib/formatters/codeframe', cwd, true) | |
}) | |
}) | |
} | |
api.registerCommand( | |
'lint', | |
{ | |
description: 'lint and fix source files', | |
usage: 'vue-cli-service lint [options] [...files]', | |
options: { | |
'--format [formatter]': 'specify formatter (default: codeframe)', | |
'--no-fix': 'do not fix errors or warnings', | |
'--no-fix-warnings': 'fix errors, but do not fix warnings', | |
'--max-errors [limit]': | |
'specify number of errors to make build failed (default: 0)', | |
'--max-warnings [limit]': | |
'specify number of warnings to make build failed (default: Infinity)' | |
}, | |
details: | |
'For more options, see https://eslint.org/docs/user-guide/command-line-interface#options' | |
}, | |
args => { | |
require('./lint')(args, api) | |
} | |
) | |
} | |