首先,请记住:
它在新版本的脚手架项目里面非常重要
它有什么用呢?
inspect internal webpack config
能快速地在控制台看到对应生成的 webpack 配置对象。
首先它是 vue 的一个扩展命令,在文件 @vue/cli/bin/vue.js 中定义了 command
还是依赖了工具包 commander
const program = require(\'commander\')
代码配置如下:
program
.command(\'inspect [paths...]\')
.de ion(\'inspect the webpack config in a project with vue-cli-service\')
.option(\'--mode <mode>\')
.option(\'--rule <ruleName>\', \'inspect a specific module rule\')
.option(\'--plugin <pluginName>\', \'inspect a specific plugin\')
.option(\'--rules\', \'list all module rule names\')
.option(\'--plugins\', \'list all plugin names\')
.option(\'-v --verbose\', \'Show full function definitions in output\')
.action((paths, cmd) => {
require(\'../lib/inspect\')(paths, cleanArgs(cmd))
})
这里的 option 比较多:
- mode
- rule
- plugin
- rules
- plugins
- verbose
在前面的文章中,我们比较常用的有 rule 相关的
再接着看一下 lib/inspect.js 文件:接受 2 个参数:
- paths
- args
module.exports = function inspect (paths, args) {
}
核心还是找到 @vue/cli-service,先获取当前执行命令的目录:
const cwd = process.cwd()
let servicePath = resolve.sync(\'@vue/cli-service\', { dir: cwd })
最终执行了 node ***/node_modules/@vue/cli-service/bin/vue-cli-service.js inspect 再带上参数:
调用了工具包 execa:
const execa = require(\'execa\')
execa(\'node\', [
binPath,
\'inspect\',
...(args.mode ? [\'--mode\', args.mode] : []),
...(args.rule ? [\'--rule\', args.rule] : []),
...(args.plugin ? [\'--plugin\', args.plugin] : []),
...(args.rules ? [\'--rules\'] : []),
...(args.plugins ? [\'--plugins\'] : []),
...(args.verbose ? [\'--verbose\'] : []),
...paths
], { cwd, stdio: \'inherit\' })
那我们接着往下看,后面就是去 cli-service 目录了:@vue/cli-service/lib/commands/inspect.js
通过 api.registerCommand 来注册一个:
module.exports = (api, options) => {
api.registerCommand(\'inspect\', {
}, args => {
})
}
在回调函数里面会处理之前的 option 传递的参数:
1、处理 rule
if (args.rule) {
res = config.module.rules.find(r => r.__ruleNames[0] === args.rule)
}
2、处理 plugin
if (args.plugin) {
res = config.plugins.find(p => p.__pluginName === args.plugin)
}
3、处理 rules
if (args.rules) {
res = config.module.rules.map(r => r.__ruleNames[0])
}
4、处理 plugins
if (args.plugins) {
res = config.plugins.map(p => p.__pluginName || p.constructor.name)
}
其他分支情况比较少用,暂时不做展开。
最后多是通过 webpack-chain 的 toString 函数来生成,最终在控制台打印:
You can inspect the generated webpack config using config.toString(). This will generate a stringified version of the config with comment hints for named rules, uses and plugins.
const { toString } = require(\'webpack-chain\')
const output = toString(res, { verbose })
继续阅读与本文标签相同的文章
上一篇 :
scala语言入门(三)scala集合
-
OTT终端不断地在全球范围扩展,未来万物互联不再是梦想
2026-05-18栏目: 教程
-
2019云栖大会 | 开源数据库界大神集体现身,邀你共同感受“开源魅力”
2026-05-18栏目: 教程
-
陈冠希竟然和罗永浩联手了!难不成要搞个锤子?当然不是……
2026-05-18栏目: 教程
-
中国最强快递公司,年入300亿,被称作“哪都通”,但国人都很嫌弃
2026-05-18栏目: 教程
-
原厂直播:ANSYS SI/PI/EMI&TI 2019 R3 新功能介绍
2026-05-18栏目: 教程
