• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    一文详解如何将Javascript打包成exe可执行文件

    发布者: 福建二哥 | 发布时间: 2025-6-16 07:35| 查看数: 68| 评论数: 0|帖子模式

    什么是 pkg?
    1. pkg
    复制代码
    是一个命令行工具,能将 Node.js 项目及其依赖打包成一个单独的可执行文件。用户无需安装 Node.js 环境即可运行你的程序。支持的操作系统包括:

    • Windows (生成
      1. .exe
      复制代码
      )
    • macOS (生成二进制文件)
    • Linux (生成二进制文件)

    安装 pkg

    通过 npm 全局安装或作为项目依赖安装:
    1. # 全局安装(推荐)
    2. npm install -g pkg

    3. # 或作为项目开发依赖安装
    4. npm install pkg --save-dev
    复制代码
    基本使用


    步骤 1:准备你的 Node.js 项目

    假设你有一个简单的脚本
    1. app.js
    复制代码
    1. // app.js
    2. console.log("Hello from pkg!");
    复制代码
    步骤 2:通过命令行打包

    在终端运行以下命令:
    1. pkg app.js --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --output myapp
    复制代码

      1. --targets
      复制代码
      : 指定目标平台和 Node.js 版本(例如
      1. node18-win-x64
      复制代码
      表示 Node.js 18 + Windows 64位)。
      1. --output
      复制代码
      : 输出文件名(会根据平台自动添加后缀,如
      1. .exe
      复制代码
      )。

    步骤 3:运行生成的可执行文件

    生成的
    1. myapp.exe
    复制代码
    (Windows)或
    1. myapp
    复制代码
    (macOS/Linux)可直接运行,无需 Node.js 环境。

    配置 package.json

    更推荐在
    1. package.json
    复制代码
    中配置 pkg 参数:
    1. {
    2.   "name": "myapp",
    3.   "version": "1.0.0",
    4.   "scripts": {
    5.     "build": "pkg . --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --output myapp"
    6.   },
    7.   "pkg": {
    8.     "assets": ["public/**/*", "views/**/*"],  // 包含静态资源
    9.     "scripts": ["scripts/*.js"]  // 包含额外脚本
    10.   }
    11. }
    复制代码
    运行
    1. npm run build
    复制代码
    即可打包。

    处理资源文件

    如果你的项目包含静态文件(如图片、HTML 模板),需注意:

    • 相对路径问题:使用
      1. __dirname
      复制代码
      1. path.resolve()
      复制代码
      确保路径正确。
    • 在 pkg.assets 中声明资源
      1. {
      2.   "pkg": {
      3.     "assets": "public/**/*"
      4.   }
      5. }
      复制代码

    高级用法


    指定 Node.js 版本和平台

    支持的平台列表:
    1. pkg -h  # 查看所有支持的 target 组合
    复制代码
    打包整个项目

    直接打包
    1. package.json
    复制代码
    的入口文件:
    1. pkg .
    复制代码
    处理环境变量

    在代码中通过
    1. process.env.PKG
    复制代码
    判断是否在打包环境中运行:
    1. if (process.env.PKG) {
    2.   console.log("Running in packaged mode!");
    3. }
    复制代码
    常见问题


    问题 1:动态导入模块失败


    • 原因
      1. pkg
      复制代码
      无法处理动态
      1. require()
      复制代码
      (如
      1. require(path.join(__dirname, file))
      复制代码
      )。
    • 解决:在
      1. pkg.scripts
      复制代码
      中预声明所有可能动态加载的文件。

    问题 2:文件路径错误


    • 原因:打包后文件系统路径变化。
    • 解决:使用
      1. path.dirname(process.execPath)
      复制代码
      获取可执行文件所在目录。

    问题 3:缺少依赖


    • 原因:未在
      1. dependencies
      复制代码
      中声明依赖。
    • 解决:确保所有依赖在
      1. package.json
      复制代码
      1. dependencies
      复制代码
      中。

    示例:打包 Express 应用


    • 项目结构:
      1. my-express-app/
      2. ├── app.js
      3. ├── public/
      4. │   └── index.html
      5. └── package.json
      复制代码
      1. app.js
      复制代码
      代码:
      1. const express = require('express');
      2. const path = require('path');
      3. const app = express();

      4. app.use(express.static(path.join(__dirname, 'public')));

      5. app.listen(3000, () => {
      6.   console.log('Server running on port 3000');
      7. });
      复制代码
      1. package.json
      复制代码
      配置:
      json
      1. {
      2.   "pkg": {
      3.     "assets": "public/**/*"
      4.   }
      5. }
      复制代码
    • 打包命令:
      1. pkg app.js --targets node18-win-x64 --output my-express-app
      复制代码

    总结


    • 使用
      1. pkg
      复制代码
      可轻松将 Node.js 项目转换为可执行文件。
    • 注意处理静态资源路径和动态模块加载。
    • 通过
      1. package.json
      复制代码
      配置更便捷。
    到此这篇关于将Javascript打包成exe可执行文件的文章就介绍到这了,更多相关js打包成exe可执行文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/javascript/339497fjw.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表