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

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文件:

  1. 安装插件:
npm install vite-plugin-native-module --save-dev
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:10:15