使用pkg库将Next.js构建产物打包为.exe文件遇错求助
解决Next.js构建产物打包为.exe文件的方案
1. 先补充package.json的bin字段并编写启动脚本
pkg要求package.json中必须有bin字段指定程序入口,但Next.js默认通过next start启动,所以需要自定义启动脚本:
- 在项目根目录创建
server.js,内容如下:
const { createServer } = require('http'); const { parse } = require('url'); const next = require('next'); // 生产环境需设为false const dev = false; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(() => { createServer((req, res) => { const parsedUrl = parse(req.url, true); handle(req, res, parsedUrl); }).listen(3000, (err) => { if (err) throw err; console.log('> Ready on http://localhost:3000'); }); });
- 在package.json中添加
bin字段:
{ "bin": "./server.js", // 保留原有其他字段 }
2. 完成Next.js生产构建
先执行官方构建命令生成生产产物:
npm run build
3. 执行pkg打包命令
由于Next.js构建产物(.next目录)需要被打包进.exe,需指定包含的资产文件,有两种方式:
方式一:通过package.json配置
在package.json中添加pkg专属配置:
{ "pkg": { "scripts": ".next/**/*.js", "assets": [".next/static/**/*", ".next/server/**/*"] } }
然后执行打包命令:
pkg . -t node16-win-x64
方式二:命令行直接指定资产
无需修改package.json,直接在命令中添加资产参数:
pkg . -t node16-win-x64 --assets ".next/static/**/*" --assets ".next/server/**/*" --scripts ".next/**/*.js"
4. 运行说明
打包完成后,双击生成的.exe文件即可启动Next.js服务,默认监听3000端口,访问http://localhost:3000即可查看应用。如需修改端口,直接修改server.js中的listen(3000)端口数值即可。
内容的提问来源于stack exchange,提问作者BharathKS
相关产品推荐
相关产品推荐

