90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
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) ||
|
|
require('eslint/package.json')
|
|
|
|
// 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',
|
|
'package.json'
|
|
]
|
|
)
|
|
|
|
api.chainWebpack(webpackConfig => {
|
|
webpackConfig.resolveLoader.modules.prepend(
|
|
path.join(__dirname, 'node_modules')
|
|
)
|
|
|
|
const { lintOnSave } = options
|
|
const allWarnings = lintOnSave === true || lintOnSave === 'warning'
|
|
const allErrors = lintOnSave === 'error'
|
|
|
|
webpackConfig.module
|
|
.rule('eslint')
|
|
.pre()
|
|
.exclude
|
|
.add(/node_modules/)
|
|
.add(require('path').dirname(require.resolve('@vue/cli-service'))) // eslint-disable-line
|
|
.end()
|
|
.test(/\.(vue|(j|t)sx?)$/)
|
|
.use('eslint-loader')
|
|
.loader('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) ||
|
|
require.resolve('eslint/package.json')
|
|
),
|
|
formatter:
|
|
loadModule('eslint/lib/formatters/codeframe', cwd, true) ||
|
|
require('eslint/lib/formatters/codeframe')
|
|
})
|
|
})
|
|
}
|
|
|
|
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)
|
|
}
|
|
)
|
|
}
|