ViteJS导入Node原生编译模块失败:报‘Unexpected character’错误求助
解决Vite构建Electron应用时原生模块导入错误的方案
核心原因
Vite默认不会处理.node这类原生二进制模块,构建时会将其当作普通JS文件解析,从而触发非JS字符的报错。
解决方案
方案1:配置Vite忽略原生模块处理
在Vite配置文件(vite.config.js)中,通过两项配置将原生模块排除在Vite构建流程之外:
import { defineConfig } from 'vite'; import electron from 'vite-plugin-electron'; export default defineConfig({ plugins: [electron()], optimizeDeps: { // 排除原生模块,避免Vite对其做依赖预构建 exclude: ['goapi'] }, build: { rollupOptions: { // 将原生模块标记为外部依赖,让Electron运行时直接加载 external: ['./build/Release/goapi.node'] } } });
方案2:调整导入方式绕开静态解析
如果配置排除不生效,可改用动态导入或保留原生require语法:
- 动态导入写法:
let goapi; (async () => { goapi = await import('./build/Release/goapi.node'); })();
- 保留
require并添加Vite忽略注释:
/* vite-ignore */ const goapi = require('./build/Release/goapi.node');
方案3:使用原生模块处理插件
可以借助vite-plugin-native-module插件自动识别并处理.node文件:
- 安装插件:
npm install vite-plugin-native-module --save-dev
- 在Vite配置中引入插件:
import { defineConfig } from 'vite'; import electron from 'vite-plugin-electron'; import nativeModule from 'vite-plugin-native-module'; export default defineConfig({ plugins: [electron(), nativeModule()] });
注意事项
- 构建后需将
build/Release目录复制到Electron输出目录,可通过Vite的build.copyPublicDir配置或自定义脚本实现。 - 确保编译
.node模块时使用的Electron头版本,与当前项目的Electron版本完全匹配,避免架构或版本不兼容问题。
内容的提问来源于stack exchange,提问作者Sunny Pelletier
相关产品推荐
相关产品推荐

