vue hello world项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

87 lines
2.9 KiB

const path = require('path')
const eslintWebpackPlugin = require('eslint-webpack-plugin')
/** @type {import('@vue/cli-service').ServicePlugin} */
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 doesn't clear the cache when you upgrade ESLint plugins (ESlint do consider config changes)
// so we have to manually generate a cache identifier that takes lock file into account.
const { cacheIdentifier, cacheDirectory } = api.genCacheConfig(
'eslint',
{
eslint: eslintPkg.version
},
['package.json']
)
api.chainWebpack(webpackConfig => {
const { lintOnSave } = options
const treatAllAsWarnings = lintOnSave === true || lintOnSave === 'warning'
const treatAllAsErrors = lintOnSave === 'error'
const failOnWarning = treatAllAsErrors
const failOnError = !treatAllAsWarnings
/** @type {import('eslint-webpack-plugin').Options & import('eslint').ESLint.Options} */
const eslintWebpackPluginOptions = {
// common to both plugin and ESlint
extensions,
// ESlint options
cwd,
cache: true,
cacheLocation: path.format({
dir: cacheDirectory,
name: process.env.VUE_CLI_TEST
? 'cache'
: cacheIdentifier,
ext: '.json'
}),
// plugin options
context: cwd,
failOnWarning,
failOnError,
eslintPath: path.dirname(
resolveModule('eslint/package.json', cwd) ||
resolveModule('eslint/package.json', __dirname)
),
formatter: 'stylish'
}
webpackConfig.plugin('eslint').use(eslintWebpackPlugin, [eslintWebpackPluginOptions])
})
}
api.registerCommand(
'lint',
{
description: 'lint and fix source files',
usage: 'vue-cli-service lint [options] [...files]',
options: {
'--format [formatter]': 'specify formatter (default: stylish)',
'--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)',
'--output-file [file_path]':
'specify file to write report to'
},
details:
'For more options, see https://eslint.org/docs/user-guide/command-line-interface#options'
},
async args => {
await require('./lint')(args, api)
}
)
}