| 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) | 
|     } | 
|   ) | 
| } |