完美解决 Uncaught ReferenceError: require is not defined 报错

16,344 阅读2分钟

完美解决 Uncaught ReferenceError: require is not defined 报错

背景

在进行 Vite 项目开发的过程中,我遇到了一个令人困扰的问题:在使用 require 引入模块时,浏览器控制台报错 Uncaught ReferenceError: require is not defined。经过深入研究和尝试,我找到了问题的根源,并想通过这篇博客分享解决方案。

image.png

问题原因

Vite 是一个基于现代浏览器原生支持 ES Module 的开发工具。而 require 是 CommonJS 的模块引入方式,这两者存在不兼容性。在 Vite 中,应该使用 import/export 来进行模块引入和导出。

解决办法

1. 使用 ES Module 语法

为了更好地适应 Vite 的设计理念,建议在项目中使用现代的 ES Module 语法。通过将 require 替换为 import,可以避免 Uncaught ReferenceError: require is not defined 的问题。

// 使用 import 替代 require
import someModule from './someModule';

2. 使用插件解决问题

如果项目中必须使用 require,并且无法修改代码以适应 ES Module 语法,可以考虑使用插件来解决问题。我推荐使用 vite-plugin-require-transform 插件,通过安装并配置这个插件,可以在 Vite 项目中支持 require。

npm i vite-plugin-require-transform --save-dev
// vite.config.(t|j)s

import { defineConfig } from 'vite';
import requireTransform from 'vite-plugin-require-transform';

export default defineConfig({
  plugins: [
    // 其他插件
    requireTransform({
      fileRegex: /.js$|.jsx$/  // 使用正则表达式匹配需要作用的文件
    }),
  ],
});

通过以上方法,我们可以顺利解决在 Vite 中使用 require 报错的问题。

总体来说,遵循 Vite 的设计理念,使用现代的 ES Module 语法是更好的选择。如果无法避免使用 require,通过插件的方式来解决问题是一种可行的方案。希望这篇博客能够帮助到遇到类似问题的开发者们。如有其他疑问,请在评论区留言,我将尽力提供帮助。