完整的 Puppeteer 项目打包过程总结

以下是完整的 Puppeteer 项目打包过程总结,学习记录:


📦 Puppeteer 项目打包完整流程

1. 项目结构准备

Web-TV/
├── black.html                  # 黑屏页面
├── player/
│   ├── PagePlayer.js           # 播放器核心逻辑
│   └── config.json             # 配置文件
├── chromium/                   # Chromium 可执行文件(可选)
├── server.js                   # 主入口文件
└── package.json                # 项目配置

2. 关键配置修改

package.json 配置
{
  "name": "Web-TV",
  "version": "1.0.0",
  "main": "server.js",
  "bin": "server.js",            // 必须添加的入口声明
  "scripts": {
    "start": "node server.js",
    "build": "pkg . --targets node18-win-x64 --output Web-TV.exe"
  },
  "dependencies": {
    "puppeteer": "^21.11.0"      // 建议使用最新版
  },
  "pkg": {
    "assets": [                  // 必须包含所有静态资源
      "black.html",
      "player/config.json",
      "chromium/**/*"
    ],
    "scripts": [
      "server.js",
      "player/**/*.js"           // 包含所有子目录JS文件
    ]
  }
}

3. 代码适配要点

文件路径处理(关键!)
// PagePlayer.js 中修改路径处理逻辑
const isPkg = typeof process.pkg !== 'undefined';
const blackPath = isPkg
  ? path.join(path.dirname(process.execPath), 'black.html')
  : path.join(__dirname, '../black.html');
HTTP 请求替代方案
// 替代 axios 的方案(三选一)
// 方案1:使用原生 http 模块
const http = require('http');

// 方案2:使用 node-fetch(需 npm install node-fetch@2)
const fetch = require('node-fetch');

// 方案3:嵌入式黑屏(无需外部文件)
await page.setContent(`<html><body style="background:black"></body></html>`);

4. 打包执行命令

# 清理环境
rm -rf node_modules package-lock.json

# 安装依赖(建议使用淘宝镜像)
npm install --registry=https://registry.npmmirror.com

# 执行打包(生成 Windows 可执行文件)
pkg . --targets node18-win-x64 --output Web-TV.exe

5. 常见问题解决

问题现象解决方案
Cannot find module检查 pkg.assets 是否包含所有依赖文件
黑屏文件加载失败使用嵌入式HTML或绝对路径处理
打包体积过大添加 !node_modules/** 排除无用文件
杀毒软件拦截将 chromium 目录加入白名单

6. 最佳实践建议

  1. 路径处理原则
  • 开发环境用 __dirname
  • 打包环境用 process.execPath 获取可执行文件所在目录
  1. 资源加载方式
   // 通用资源加载方法
   function getAssetPath(relativePath) {
     return path.join(
       typeof process.pkg !== 'undefined' 
         ? path.dirname(process.execPath) 
         : process.cwd(),
       relativePath
     );
   }
  1. 调试技巧
   # 查看打包文件包含内容
   strings Web-TV.exe | grep "black.html"

   # 启用详细日志
   pkg --debug .

7. 学习要点记录

  1. pkg 工作原理:将项目打包成 V8 字节码快照,需显式声明资源文件
  2. 路径陷阱:打包后 __dirname 指向 C:\snapshot 虚拟目录
  3. 依赖管理:生产依赖必须通过 npm install --save 安装
  4. Chromium 处理:推荐使用 puppeteer-core + 本地 Chromium

按照这个流程操作,即可生成可在无 Node.js 环境的 Windows 机器上直接运行的独立可执行文件。建议在实际操作时配合 --debug 参数逐步验证打包结果。

npx puppeteer browsers install chrome@latest
npm install -g json
json -f package.json
pkg . –targets node18-win-x64

Comments

  1. Owner
    1 week ago
    2025-5-27 21:44:40

    可能使用到的命令
    npm install -g json
    json -f package.json
    pkg . –targets node18-win-x64

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next