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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:54:23