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

如何解决运行pkg .时出现的“Error: Cannot find module 'puppeteer'”问题

解决Puppeteer脚本打包成独立EXE的问题

问题分析

直接运行pkg .生成的EXE依赖外部node_modules,是因为Puppeteer包含Chromium二进制文件这类非JS资源,pkg默认不会自动打包;而全量指定node_modules/**/*.*会导致打包资源过大,进程卡死。

解决方案

1. 精准配置pkg的assets路径

不要全量打包node_modules,只指定Puppeteer相关的必要资源,修改package.json的pkg配置:

"pkg": {
  "assets": [
    "node_modules/puppeteer/.local-chromium/**/*",
    "node_modules/puppeteer-extra/**/*",
    "node_modules/puppeteer-extra-plugin-stealth/**/*"
  ],
  "targets": ["node18-win-x64"] // 替换为你使用的Node版本+平台,减少打包耗时
}

配置完成后重新运行pkg .即可,这样只打包必需的依赖,避免进程卡死。

2. 代码中适配Chromium路径(可选)

为了确保打包后能正确找到Chromium二进制文件,可在代码中手动指定路径:

const fs = require("fs");
const puppeteer = require("puppeteer-extra");
const path = require("path");
const StealthPlugin = require("puppeteer-extra-plugin-stealth");

puppeteer.use(StealthPlugin());

// 适配pkg打包后的Chromium路径
const getChromiumPath = () => {
  // 替换为你本地node_modules中Chromium的版本文件夹名(比如win64-1181205)
  const chromiumVersionDir = "win64-xxxxxx";
  return path.join(
    __dirname,
    "node_modules",
    "puppeteer",
    ".local-chromium",
    chromiumVersionDir,
    "chrome-win",
    "chrome.exe"
  );
};

// 后续启动浏览器时指定路径
(async () => {
  const browser = await puppeteer.launch({
    executablePath: getChromiumPath(),
    // 其他配置项
  });
  // 你的业务代码
})();

3. 换用nexe工具(如果pkg仍有问题)

nexe对Puppeteer这类带二进制资源的库支持更友好,步骤如下:

  1. 全局安装nexe:
npm install nexe -g
  1. 打包脚本:
nexe index.js --build --assets "node_modules/puppeteer/.local-chromium/**/*,node_modules/puppeteer-extra/**/*,node_modules/puppeteer-extra-plugin-stealth/**/*"

注意事项

  • 打包前清理缓存:删除node_modules、package-lock.json后重新执行npm install,避免旧依赖干扰
  • 确认Puppeteer版本为稳定版,避免兼容性问题
  • 指定targets可以大幅缩短pkg的打包时间,避免它尝试构建多平台版本

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:05:37