C/C++ 扩展
Node.js 的 C/C++
扩展有一个非常显著的特点,它只支持构建成 CommonJS
格式,并使用 require()
加载。这对强依赖 ESModule
格式的打包工具,如 Vite、Rollup 来说是致命的。
虽然有 @rollup/plugin-commonjs 这样的工具插件,但它并非万能的,尤其是在一些动态 require
的场景下。这也是 cjs
和 esm
最大的区别。
因此,很多时候我们不得不使用 external
选项排除 C/C++
扩展的构建,以确保它能够正常工作。
注意
当然,这并非绝对的。如果你熟悉 Vite、Rollup 的工作原理以及 C/C++
扩展的绑定方式,那么我相信你会有更好的方法来处理它们。
此外,这里提供了一些 C/C++
扩展的示例 👉 electron-vite-samples。
中文
Node.js 的 C/C++
扩展有个很显著的特点,它只支持构建成为 CommonJS
格式的模块,并且使用 require()
加载它。这对强依赖 ESModule
格式的构建工具像 Vite、Rollup 十分的致命。
虽然有 @rollup/plugin-commonjs 这样的工具插件,但它不是万能的,尤其是在一些动态加载的场景,这同样也是 cjs
与 esm
最大的不同点。
所以说,很多时候我们不得不使用 external
选项排除 C/C++
模块构建,以保障它能正常工作。
当然,这不是绝对的。如果你很熟悉 Vite、Rollup 的工作原理和 C/C++
模块的 binding
方式,那么我相信你有更好的办法处理它们。
此外,这里提供了一些 C/C++
模块的模板 👉 electron-vite-samples。
示例
import electron from 'vite-plugin-electron'
export default {
plugins: [
electron({
// Main process entry file of the Electron App.
entry: 'electron/main/index.ts',
vite: {
build: {
rollupOptions: {
external: [
'better-sqlite3',
'sqlite3',
'serialport',
// other `C/C++` addons
],
},
},
},
}),
],
}
vite-plugin-native
此外,你还可以尝试使用社区插件 vite-plugin-native 来加载 C/C++
扩展。
中文
另外,你也可以尝试使用社区插件 vite-plugin-native 加载 C/C++
扩展。
import electron from 'vite-plugin-electron'
import native from 'vite-plugin-native'
export default {
plugins: [
electron({
entry: 'electron/main.ts',
vite: {
plugins: [
native(/* options */),
],
},
}),
],
}