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.
		
		
		
		
			
				
					75 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					75 lines
				
				2.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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'
							 | 
						||
| 
								 | 
							
								}
							 |