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.
		
		
		
		
			
				
					86 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					86 lines
				
				2.8 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								}
							 |