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

如何将EJS模板文件打包进Node.js可执行文件

解决pkg打包Express+EJS应用时视图文件缺失的问题

核心原因

pkg默认仅打包.js/.json等Node.js可识别的模块文件,EJS模板这类静态文件不会被自动包含,导致运行时找不到指定的视图目录。

解决方案

方法一:通过package.json配置pkg打包资源

这是最简便的处理方式,直接告知pkg需要打包的EJS文件:

  1. 在项目根目录的package.json中添加pkg配置项,指定要包含的视图文件路径:
{
  "pkg": {
    "assets": ["view/**/*.ejs"]
  }
}
  • view/**/*.ejs表示打包view目录下所有子目录中的.ejs文件,可根据项目实际目录结构调整匹配规则。
  1. 保持原Express视图配置不变即可。pkg运行时会将打包的资源放到snapshot临时目录,原代码的path.join(__dirname, 'view')会自动指向该目录下的视图文件夹,无需额外修改路径逻辑。

方法二:手动读取EJS模板并渲染

若不想修改package.json,可通过代码直接读取模板文件并完成渲染:

  1. 确保已安装EJS依赖:npm install ejs

  2. 修改路由代码,替换res.render为手动读取渲染逻辑:

const express = require('express');
const ejs = require('ejs');
const fs = require('fs');
const path = require('path');
const app = express();

app.get('/', (req, res) => {
  // 拼接模板文件的完整路径
  const templatePath = path.join(__dirname, 'view', 'myfile.ejs');
  // 同步读取模板文件内容
  const templateContent = fs.readFileSync(templatePath, 'utf8');
  // 渲染模板(第二个参数为模板所需的变量数据)
  const renderedHtml = ejs.render(templateContent, { /* 你的数据对象 */ });
  // 返回渲染后的HTML内容
  res.send(renderedHtml);
});
  1. 此方法仍需在package.json中配置pkg.assets包含view/**/*.ejs,否则pkg不会将模板文件打包进可执行文件。

验证打包效果

重新执行pkg打包命令(如pkg .),将生成的.exe文件单独复制到服务器运行,即可正常加载EJS视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:40:09