打包和 Koffi

预计阅读时间: 3 分钟

源文档 - Bundlers and Koffi

打包

本地模块

在 Koffi 2.5.9 中简化

Koffi 使用本地模块来工作。NPM 包包含各种平台和架构的二进制文件,运行时会选择合适的模块。

重要

请注意,Koffi 是为 Node.js(或 Electron)设计的,而不是为浏览器!在浏览器中无法加载本地库!

理论上,打包器/捆绑器应该能够找到所有本地模块,因为它们在 JavaScript 文件中明确列出(作为静态字符串),并且会以某种方式将它们打包。

如果做不到这一点,你可以手动将 node_modules/koffi/build/koffi 目录复制到你的捆绑脚本旁边。

以下是一个可以工作的示例:

koffi/ win32_x64/ koffi.node linux_x64/ koffi.node ... MyBundle.js

在 Electron 中运行时,Koffi 还会尝试在 process.resourcesPath 中查找本地模块。对于一个 Electron 应用程序,你可以这样做:

locales/ resources/ koffi/ win32_ia32/ koffi.node win32_x64/ koffi.node ... MyApp.exe

间接加载器

新增于 Koffi 2.6.2

某些捆绑器(如 vite)不喜欢在本地模块中使用 require

在这种情况下,你可以使用 require('koffi/indirect'),但你需要确保本地 Koffi 模块已正确打包。

打包示例

使用 electron-builder 打包 Electron 应用程序

使用 electron-builder 打包应该可以正常工作。

请查看仓库中的完整工作示例

使用 Electron Forge 打包

使用 Electron Forge 打包应该可以正常工作,即使在使用 webpack 时也是如此,这在你运行以下命令时已经配置好了:

npm init electron-app@latest my-app -- --template=webpack

请查看仓库中的完整工作示例

NW.js

像 nw-builder 这样的打包器应该可以正常工作。

你可以在仓库中找到一个完整的示例

Node.js 和 esbuild

你可以轻松地使用复制加载器告诉 esbuild 复制本地文件,一切应该都能正常工作。可以使用类似以下的命令:

esbuild index.js --platform=node --bundle --loader:.node=copy --outdir=dist/

你可以在仓库中找到一个完整的示例

Node.js 和 yao-pkg

使用 yao-pkg 为基于 Node.js 的项目创建二进制包。

你可以在仓库中找到一个完整的示例