如何将Node.js项目打包为.exe?使用pkg工具报错求助
问题解答
1. JSON文件导入方式问题
你用的import config from "../../config.json" assert {type: "json"}是ES标准的JSON导入断言语法,但pkg内置的Babel默认未启用importAssertions插件,所以才会报解析失败。解决办法二选一:
- 换用CommonJS的导入方式,pkg对其支持更稳定:
const config = require('../../config.json'); - 给pkg配置Babel插件:在项目根目录创建
.babelrc文件,内容如下:
同时安装对应插件:{ "plugins": ["@babel/plugin-syntax-import-assertions"] }npm install @babel/plugin-syntax-import-assertions --save-dev
2. 打包操作的问题
Puppeteer目录无法打包的处理
pkg确实无法自动打包node_modules\puppeteer\.local-chromium这类含大型二进制文件的目录,必须手动处理:
- 打包完成后,将
.local-chromium整个目录复制到exe文件的同级目录; - 在代码里指定Chromium的本地路径,示例:
const puppeteer = require('puppeteer'); const browser = await puppeteer.launch({ executablePath: './.local-chromium/win64-xxxxxx/chrome-win/chrome.exe' // 替换为你实际的路径 });
node10-x64字节码生成失败的处理
这个问题大概率是pkg版本与你的Node.js版本不兼容导致的,可尝试:
- 打包时指定与当前Node版本匹配的目标平台,比如你用Node18,就运行
pkg --target node18-win-x64 package.json; - 升级pkg到最新版本:
npm install pkg@latest -g; - 删除pkg缓存(一般在
C:\Users\<你的用户名>\.pkg-cache)后重新打包。
3. 生成.exe的方法是否正确?
你用pkg package.json的方式是正确的,但可以补充配置优化打包效果:
- 在
package.json里明确入口文件和打包配置,示例:{ "main": "index.js", // 替换为你的项目入口文件 "bin": "index.js", "pkg": { "targets": ["node18-win-x64"], "assets": ["config.json"] // 把需要打包的静态文件(比如你的config.json)添加进来 } } - 之后执行
pkg .(直接打包当前目录,比指定package.json更便捷)
内容的提问来源于stack exchange,提问作者Timen
相关产品推荐
相关产品推荐

