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