◆

Vue CLI 查看项目 Webpack 配置的方法

2023-02-02 01:370

vue inspect 查看项目的 webpack 配置 开发环境:npx vue-cli-service inspect --mode development >> webpack.config.development.js 生产环境:npx vue-cli-service inspect --mode production >> webpack.config.production.js

npx vue-cli-service 可替换成 vue

在产生的 js 文件开头,添加:module.exports =,然后格式化即可查看。

为什么需要这个命令

Vue CLI 项目里看不到 webpack.config.js,因为整份配置是 @vue/cli-service 在运行时用 webpack-chain 拼出来的:先由 CLI 内置的一堆 preset(config/base.js、config/css.js、config/prod.js 等)叠加,再叠上你安装的每个 CLI 插件的修改,最后才轮到 vue.config.js 里的 configureWebpack / chainWebpack。

这个链条一长,「我在 vue.config.js 里改的东西到底生效了没、生效成了什么样」就完全靠猜。inspect 的作用就是把 webpack-chain 最终 toConfig() 出来的对象序列化打印出来,让你看到真正交给 webpack 的那份配置。

>> 是追加重定向,反复执行会把内容叠在一起。我一般用 > 覆盖,避免看到拼在一起的两份配置:

npx vue-cli-service inspect --mode development > webpack.dev.js
npx vue-cli-service inspect --mode production > webpack.prod.js

只看某一部分

整份配置动辄上千行,直接翻很累。inspect 支持传路径参数,只输出配置对象的某个子树:

# 只看所有 loader 规则
npx vue-cli-service inspect module.rules

# 只看第 3 条规则(数组下标从 0 开始)
npx vue-cli-service inspect module.rules.3

# 只看插件列表
npx vue-cli-service inspect plugins

# 只看输出配置
npx vue-cli-service inspect output

# 只看 devServer
npx vue-cli-service inspect devServer

# 只看别名
npx vue-cli-service inspect resolve.alias

排查 loader 问题时 module.rules 是最常用的。想知道 .scss 文件到底过了几层 loader、sass-loader 拿到的选项是什么,直接看这一段就够了。

还有两个有用的参数:

# 输出可直接 require 的合法 JS(自动补 module.exports)
npx vue-cli-service inspect --mode production --verbose

# 输出规则和插件的名字列表,用来给 chainWebpack 定位
npx vue-cli-service inspect --rules
npx vue-cli-service inspect --plugins

--rules 和 --plugins 我用得最多。因为 chainWebpack 里操作规则必须用名字:

// vue.config.js
module.exports = {
  chainWebpack(config) {
    // 'svg' 这个名字就是从 inspect --rules 里查出来的
    config.module.rule('svg').exclude.add(/src\/icons/);

    // 插件名同理,从 inspect --plugins 里查
    config.plugin('html').tap(args => {
      args[0].title = '自定义标题';
      return args;
    });
  },
};

名字写错不会报错,只会静默不生效——这是 chainWebpack 最坑的地方,inspect --rules 是唯一可靠的对照表。

输出为什么不是合法 JS

原文说要手动加 module.exports =,根本原因是 inspect 默认输出的是 Node 的 util.inspect 格式,为了可读性做了些处理:函数会被打印成 function () { ... } 这种省略形式,正则、Symbol、循环引用也各有特殊表示。所以它是给人看的,不是给机器执行的。

加上 --verbose 之后函数体会完整展开,可读性变差但更接近真实配置。想要能 require 的版本,配合 module.exports = 手动补一下确实是最省事的办法:

{ echo "module.exports ="; npx vue-cli-service inspect --mode production; } > webpack.prod.js
npx prettier --write webpack.prod.js

补完格式化一下,编辑器的语法高亮和折叠就都能用了,翻起来舒服很多。

别把导出的文件提交进仓库

这个文件是快照,只反映生成它那一刻的配置。之后改了 vue.config.js 或者装了新插件,它就过期了,但看起来没有任何区别。我见过因为翻了一份半年前导出的配置而排查方向完全跑偏的情况,所以它应该被当成临时产物:

webpack.*.js

Vite 项目怎么看

Vue CLI 之后的项目基本都转 Vite 了,没有等价的 inspect 命令,但有两个替代手段:

# 看最终解析出的完整配置(包括所有插件注入的部分)
npx vite --debug config

# 看每个插件对某个文件做了什么转换,排查 transform 链
npx vite --debug plugin-transform

或者在 vite.config.js 里直接打印,因为 Vite 的配置就是普通 JS 对象,不存在被隐藏的部分:

export default defineConfig(env => {
  const config = {
    /* ... */
  };
  console.log(JSON.stringify(config, null, 2));
  return config;
});

这也是 Vite 相比 Vue CLI 在调试上的一个实际优势——配置是显式的,不需要专门的命令去反查。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEVue CLI 查看项目 Webpack 配置的方法加载中