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

如何在Webpack中正确使用THREE.js的JSONLoader?

解决Webpack环境下THREE.js JSONLoader的加载问题

嘿,我正好踩过类似的坑,来给你捋清楚怎么搞定!

首先明确核心问题:别直接把require("./foobar.json")的结果传给JSONLoader。因为Webpack的require()会自动把JSON文件解析成JavaScript对象,而JSONLoader需要的是一个能通过HTTP请求获取的原始JSON文件路径,直接传解析后的对象肯定会触发Three.js的奇怪错误。

那404的问题怎么解决呢?关键是让Webpack正确处理你的JSON模型文件——把它复制到打包输出目录,同时返回正确的访问路径。具体步骤如下:

1. 安装file-loader

先安装file-loader来处理静态资源文件:

npm install file-loader --save-dev

2. 配置Webpack规则

在你的Webpack配置文件中,添加处理JSON文件的规则,禁用Webpack默认的JSON解析行为,让file-loader负责复制文件并返回路径:

module.exports = {
  // ...其他配置项
  module: {
    rules: [
      // ...其他loader规则
      {
        test: /\.json$/,
        type: 'javascript/auto', // 阻止Webpack自动把JSON解析为JS对象
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[ext]', // 保持原文件名输出
              outputPath: 'models/', // 指定输出到打包目录的models文件夹(可自定义)
              publicPath: 'models/' // 若静态资源有公共路径,这里对应设置
            }
          }
        ]
      }
    ]
  }
};

3. 正确加载模型文件

在代码里,通过require()获取Webpack处理后的文件URL,再传给JSONLoader:

var jsonLoader = new THREE.JSONLoader();
// require会返回处理后的模型文件访问路径
var modelUrl = require("./foobar.json");

jsonLoader.load(modelUrl, function(geometry, materials) {
  // 这里正常处理加载后的几何体和材质
  var mesh = new THREE.Mesh(geometry, materials);
  scene.add(mesh);
});

额外提醒

如果你用的是Three.js r125及以上版本,JSONLoader已经被官方废弃了,推荐使用ObjectLoader或者更主流的GLTFLoader来加载模型,这些loader在Webpack环境下的适配性会更好哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:18