You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack 4中如何禁用内置json-loader,改用自定义json-loader?

这个问题我之前帮别人排查过,Webpack 4 对 .json 文件的处理逻辑确实和 3 不一样——它默认启用了内置的 json-loader,而且优先级很高,导致你的自定义 loader 处理完后,内置的还会再跑一遍,把你输出的 JS 源码当成 JSON 解析,自然就报错了。

解决起来其实很简单,核心就是禁用 Webpack 内置的 json 模块处理规则,具体操作如下:

关键配置修改

在你的 webpack.config.ts 的 module.rules 里,针对 .json 文件的规则添加 type: 'javascript/auto',这个配置是明确告诉 Webpack:「别用你内置的 json 处理逻辑,我自己来」。

给你一个具体的配置示例:

// webpack.config.ts
import path from 'path';

export default {
  // ...其他配置项(entry、output 等)
  module: {
    rules: [
      // 其他 loader 规则(比如 ts-loader、css-loader 等)
      {
        test: /\.json$/,
        use: ['path/to/your-custom-json-loader'], // 替换成你的自定义 loader 路径或名称
        type: 'javascript/auto', // 核心配置:禁用内置 json-loader
        // 可选:添加 include/exclude 限定处理范围,避免不必要的文件匹配
        include: path.resolve(__dirname, 'src'),
      },
    ],
  },
};

原理说明

Webpack 4 开始引入了「模块类型(module type)」的概念,.json 文件默认被归类为 json 类型,这种类型会自动触发内置的 json-loader 去解析内容。而设置 type: 'javascript/auto' 后,Webpack 会把 .json 文件当作普通 JavaScript 模块处理,完全遵循你配置的 loader 链,不会再调用内置的 json-loader 了。

只要你的自定义 loader 最终输出的是合法的 JavaScript 模块代码(比如通过 module.exports 导出处理后的内容),这个配置就能完美还原 Webpack 3 的运行效果。

内容的提问来源于stack exchange,提问作者retorquere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:59:16