• egg 打包


    目标

    打包 egg 项目为单一的可执行文件,支持跨平台,摆脱环境依赖。

    准备

    npm install -g pkg

    初始化项目

    1.0.0-使用脚手架初始化 eggjs 项目

    npm init egg --type=ts

    1.0.1-安装依赖

    npm i

    1.0.2-测试运行

    npm run dev

    1.0.3 创建测试用静态文件并配置 egg-etag

    npm install egg-etag

    plugin.ts中增加配置启用egg-etag

    etag: {
      package: 'egg-etag',
    },

    增加 pkg 相关配置 1.0.4

    在项目根目录创建pkg-entry.js

    "use strict";
    const fs = require("fs");
    
    // 如果是egg的ts项目,由于egg-script会给ts项目通过-r引入sourcemap的注入文件,但是pkg的spawn不支持,所以把项目标识为飞ts
    // 如果不是ts项目忽略一下两行
    const pkgInfo = require("./package");
    pkgInfo.egg.typescript = false; // 防止egg-script识别为 typescript 自动添加soucemap支持(--require 在pkg的spawn中不支持)
    
    // 由于egg-script是默认以当前执行proccess.cwd() 路径为默认项目的,打包后需要每次输入 /snapshot/${项目文件夹名} 作为指定目录
    // 所以,以下为修改参数,自动嵌入“/snapshot/${项目文件夹名}”
    const baseDir = "/snapshot/" + fs.readdirSync("/snapshot")[0];
    // 当 start 的时候,自动嵌入bashDir为 /snapshot/${项目文件夹名}
    // 如果要传入自定义启动参数也可以在这里处理,如指定是否后台运行,指定端口号等
    const startIndex = process.argv.indexOf("start");
    if (startIndex > -1) {
      process.argv = [].concat(
        process.argv.slice(0, startIndex + 1),
        baseDir,
        process.argv.slice(startIndex + 1)
      );
    }
    
    // 然后直接调起egg-scripts执行
    require("./node_modules/egg-scripts/bin/egg-scripts.js");

    .eslintignore中增加忽略pkg-entry.js

    package.json中增加以下内容

    "bin": "pkg-entry.js",
    "pkg": {
      "scripts": [
        "./app/**/*.js",
        "./config/**/*.js"
      ],
      "assets": [
        "./app/public/**/*",
        "./node_modules/nanoid/**/*.js"
      ]
    },

    在项目根目录创建编译脚本build.sh

    set -e
    # 编译ts为js
    npm run tsc
    # 编译生成二进制文件
    pkg .  --out-path ./dist
    # 清理临时js文件
    npm run clean

    dist/目录加入.gitgnore

    config.prod.ts中的可选配置

    // 配置运行时相关文件存储路径
    config.rundir = process.cwd() + "/run";
    
    // 配置日志目录
    config.logger = {
      dir: process.cwd() + "/logs",
    };
    
    // 配置静态资源路径
    config.static = {
      prefix: "/public",
      dir: process.cwd() + "/public",
    };

    填坑

    .gitignore中增加 !pkg-entry.js

    重点

    转自:http://lidong.xin/egg/eggts-pkg.html#%E7%9B%AE%E6%A0%87

  • 相关阅读:
    团队项目第二阶段——第一天
    团队项目第一阶段绩效评估
    铁大树洞与市面上现有APP对比
    第一阶段其他组评价汇总
    第一阶段对其他组的评价
    铁大树洞app功能演示和使用说明
    团队冲刺——第十天
    团队冲刺——第九天
    团队冲刺——第八天
    梦断代码读后感04--毁灭即拯救
  • 原文地址:https://www.cnblogs.com/crazycode2/p/14551730.html
Copyright © 2020-2023  润新知