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

Vite项目中node_modules内.hbs文件无加载器配置的解决方案咨询

解决Vite/Rollup无法处理node_modules中.hbs文件的打包问题

核心问题

Vite默认会跳过node_modules目录下文件的自定义转换逻辑(仅处理预定义的文件类型),而你的依赖是未打包的源码,其中的.hbs文件没有被任何加载器处理,导致打包报错No loader is configured for ".hbs" files。

解决方案

1. 调整自定义插件,指定处理目标依赖

修改你编写的hbsfilter插件,明确指定要处理node_modules中你的目标依赖内的.hbs文件,同时设置插件执行优先级为pre(确保在其他插件之前处理):

function hbsfilter() {
  return {
    name: 'hbsfilter',
    enforce: 'pre', // 优先执行此插件
    // 指定要处理的文件范围:项目内的.hbs + 目标依赖内的.hbs
    transformInclude(id) {
      return id.endsWith('.hbs') || id.endsWith('.hbs?raw') 
        || (id.includes('node_modules/你的依赖包名') && (id.endsWith('.hbs') || id.endsWith('.hbs?raw')));
    },
    transform(code, id) {
      if (id.endsWith('.hbs') || id.endsWith('.hbs?raw')) {
        return {
          code: `export default ${JSON.stringify(code)};`,
          map: { mappings: '' }
        };
      }
      return null; // 不需要处理的文件直接返回null即可
    }
  };
}

exports.hbsfilter = hbsfilter;

2. 配置Vite,排除目标依赖的预构建

Vite的依赖预构建会把node_modules里的依赖打包成ES模块,但预构建过程中不会应用你的自定义插件,所以需要把这个未打包的依赖排除在预构建之外,让插件直接处理它:

import { defineConfig } from 'vite';
import { hbsfilter } from './你的插件路径';

export default defineConfig({
  plugins: [hbsfilter()],
  optimizeDeps: {
    exclude: ['你的依赖包名'] // 不让Vite预构建这个依赖
  },
  // 如果是SSR场景,额外添加以下配置
  ssr: {
    noExternal: ['你的依赖包名']
  }
});

3. 验证插件是否生效

如果还是没生效,可以在插件的transform钩子中添加日志,确认目标文件是否被捕获:

transform(code, id) {
  console.log('正在处理文件:', id); // 查看是否打印了目标依赖的.hbs路径
  // ... 原有逻辑
}

替代方案:使用vite-plugin-raw加载.hbs

如果自定义插件仍有问题,可以尝试vite-plugin-raw,并配置它处理node_modules中的目标依赖:

import { defineConfig } from 'vite';
import rawPlugin from 'vite-plugin-raw';

export default defineConfig({
  plugins: [
    rawPlugin({
      include: [
        '**/*.hbs',
        'node_modules/你的依赖包名/**/*.hbs'
      ]
    })
  ],
  optimizeDeps: {
    exclude: ['你的依赖包名']
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:55:08