nodejs egg+pkg打包部署文档

nodejs egg+pkg打包部署文档

egg框架配置pkg打包成可执行文件,网上找了好多资料都打包不成功,这里记录一下需要配置的地方

  1. 安装pkg npm install pkg -g
  2. 在egg框架项目下的config/config.default.js里添加配置:
//  pkg打包配置 begin
const process = require('process')

// 通过process.cwd()获取当前执行文件执行的路径
config.rundir = process.cwd() + '/run';// 配置执行时临时文件的路径

config.logger = {
  dir: path.join(process.cwd(), 'logs'),//配置普通日志文件地址
};

config.static = {
  dir: process.cwd() + '/public',
};
config.customLogger = {
    scheduleLogger: {
      file: path.join(process.cwd(), 'logs', 'egg-schedule.log'),//配置定时任务日志的地址
    },
};
//  pkg打包配置 end
  1. package.json里添加pkg打包支持
  • pkg里的scripts 里配置需要打入的脚本文件,比如你写了个dateUtil.js放在了utils/文件下,那么scripts就需要加入配置./utils/dateUtil.js,或者./utils/*.js
  • pkg里的assets 就是一些存放静态文件的路径
"bin": "pkg-build.js",
"pkg": {
    "scripts": [
      "build/**/*.js",
      "./app/**/*.js", //必须
      "./config/**/*.js", //必须
      "./config/*", //可选,建议填写,与下面第3条对应
      "./app.js",
      "./agent.js",
      "./node_modules/nanoid/**/*.js" //必须
    ],
    "assets": [
      "./app/view/**/*", //如果使用了模板文件这个必须有,比如使用了html等(我这里所有的html就在view文件下,你放在哪这里就写哪个文件)
      "./public/**/*", //必须
      "./node_modules/egg-mysql/**/*", //如果使用了mysql,那么这个也必须有
      "./node_modules/egg-view-nunjucks/**/*" //我这里使用的模板文件是html,所以需要配置这个。具体配什么根据实际情况来
    ]
},
//在scripts加入如下代码(打包使用,不加也行,如果不加就用pkg来打包,具体参数可参考pkg文档)
"scripts": {
    "pkg:win": "pkg . -t win --out-path ./dist --debug",
    "pkg:linux": "pkg . -t linux --out-path /usr/dist --debug",
  },
  1. config下添加env文件,里面内容填prod。(这个文件主要是解决打包完成后运行会一直显示XXX文件不存在的问题。问题就是:本地开发运行环境下 watcher 插件功能异常,实时上我们打包生成可执行文件的时候应该默认是应用于生产环境的,所以这个时候我们需要在 config 目录下新增 env 文件来指定当前环境为生产环境)
  2. 在与package.json同级的目录下新建pkg-build.js,内容如下
  • 写法1(固定端口):
const egg = require('egg');
const workers = Number(process.argv[2] || require('os').cpus().length);
egg.startCluster({
  workers,
  baseDir: __dirname,
});
  • 写法2(在启动时指定端口,启动示例:myApp.exe start --port=7002):
const egg = require('egg');
const workers = Number(process.argv[2] || require('os').cpus().length);
let port=7001 // 默认端口
// 获取指定的参数,我这里就是截取了一个参数 虽能使用但并不严谨,可自行修改,
process.argv.forEach((val, index) => {
    console.log(`${index}${val}`)
    if (val.indexOf('--port=')>-1){
      port = val.replace('--port=','')
    }
});
egg.startCluster({
    workers,
    port:port,
    baseDir: __dirname,
});
  1. 打包(如果package.json里没配置,那就使用pkg命令来打包)
npm run pkg:win
npm run pkg:linux
  1. 打包成功后就能运行了,(linux下启动要先赋予启动权限 chmod +xr 程序名称
windows下运行:  程序名称.exe start
linux下运行:   ./程序名称 start
  • 最后配上我的项目目录,具体pkg打包的配置内容可参考你自己的格式修改
    最后配上我的项目目录,具体pkg打包的配置内容可参考你自己的格式修改
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值