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.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							2.5 KiB
						
					
					
				module.exports = (api, options) => { | 
						|
  api.registerCommand( | 
						|
    'inspect', | 
						|
    { | 
						|
      description: 'inspect internal webpack config', | 
						|
      usage: 'vue-cli-service inspect [options] [...paths]', | 
						|
      options: { | 
						|
        '--mode': 'specify env mode (default: development)', | 
						|
        '--rule <ruleName>': 'inspect a specific module rule', | 
						|
        '--plugin <pluginName>': 'inspect a specific plugin', | 
						|
        '--rules': 'list all module rule names', | 
						|
        '--plugins': 'list all plugin names', | 
						|
        '--verbose': 'show full function definitions in output', | 
						|
        '--skip-plugins': 'comma-separated list of plugin names to skip for this run' | 
						|
      } | 
						|
    }, | 
						|
    args => { | 
						|
      const { chalk, get } = require('@vue/cli-shared-utils') | 
						|
      const { toString } = require('webpack-chain') | 
						|
      const { highlight } = require('cli-highlight') | 
						|
      const config = api.resolveWebpackConfig() | 
						|
      const { _: paths, verbose } = args | 
						|
 | 
						|
      let res | 
						|
      let hasUnnamedRule | 
						|
      if (args.rule) { | 
						|
        res = config.module.rules.find(r => r.__ruleNames[0] === args.rule) | 
						|
      } else if (args.plugin) { | 
						|
        res = config.plugins.find(p => p.__pluginName === args.plugin) | 
						|
      } else if (args.rules) { | 
						|
        res = config.module.rules.map(r => { | 
						|
          const name = r.__ruleNames ? r.__ruleNames[0] : 'Nameless Rule (*)' | 
						|
 | 
						|
          hasUnnamedRule = hasUnnamedRule || !r.__ruleNames | 
						|
 | 
						|
          return name | 
						|
        }) | 
						|
      } else if (args.plugins) { | 
						|
        res = config.plugins.map(p => p.__pluginName || p.constructor.name) | 
						|
      } else if (paths.length > 1) { | 
						|
        res = {} | 
						|
        paths.forEach(path => { | 
						|
          res[path] = get(config, path) | 
						|
        }) | 
						|
      } else if (paths.length === 1) { | 
						|
        res = get(config, paths[0]) | 
						|
      } else { | 
						|
        res = config | 
						|
      } | 
						|
 | 
						|
      const output = toString(res, { verbose }) | 
						|
      console.log(highlight(output, { language: 'js' })) | 
						|
 | 
						|
      // Log explanation for Nameless Rules | 
						|
      if (hasUnnamedRule) { | 
						|
        console.log(`--- ${chalk.green('Footnotes')} ---`) | 
						|
        console.log(`*: ${chalk.green( | 
						|
          'Nameless Rules' | 
						|
        )} were added through the ${chalk.green( | 
						|
          'configureWebpack()' | 
						|
        )} API (possibly by a plugin) instead of ${chalk.green( | 
						|
          'chainWebpack()' | 
						|
        )} (recommended). | 
						|
    You can run ${chalk.green( | 
						|
    'vue-cli-service inspect' | 
						|
  )} without any arguments to inspect the full config and read these rules' config.`) | 
						|
      } | 
						|
    } | 
						|
  ) | 
						|
} | 
						|
 | 
						|
module.exports.defaultModes = { | 
						|
  inspect: 'development' | 
						|
}
 | 
						|
 |