UNPKG

@luban-cli/cli-plugin-service

Version:
139 lines 6.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const cli_shared_utils_1 = require("@luban-cli/cli-shared-utils"); const webpack = require("webpack"); const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const formatStats_1 = require("../utils/formatStats"); const serverRender_1 = require("../utils/serverRender"); const cleanDest_1 = require("../utils/cleanDest"); const buildServerSideDeployFile_1 = require("../utils/buildServerSideDeployFile"); class Build { constructor(api, projectConfig, args) { this.api = api; this.projectConfig = projectConfig; let output = projectConfig.outputDir; if (args.dest) { output = args.dest; } this.outputDir = api.resolve(output); } buildClient() { return __awaiter(this, void 0, void 0, function* () { const webpackConfig = this.api.resolveWebpackConfig("client"); return new Promise((resolve, reject) => { if (!webpackConfig) { reject("client side webpack config unable resolved; command [build]"); return; } webpack(webpackConfig, (err, stats) => { // Fatal webpack errors (wrong configuration, etc) if (err) { reject(err); return; } formatStats_1.logStatsErrorsAndWarnings(stats); // Compilation errors (missing modules, syntax errors, eslint-errors. etc) if (stats.hasErrors()) { reject("Build failed with some Compilation errors occurred."); return; } const targetDirShort = path_1.default.relative(this.api.getContext(), this.outputDir); cli_shared_utils_1.log(formatStats_1.formatStats(stats, targetDirShort, this.api)); console.log(); cli_shared_utils_1.done(`Client Build complete. The ${chalk_1.default.cyan(targetDirShort)} directory is ready to be deployed.`); resolve(); }); }); }); } buildServer() { return __awaiter(this, void 0, void 0, function* () { const webpackConfig = this.api.resolveWebpackConfig("server"); return new Promise((resolve, reject) => { if (!webpackConfig) { reject("server side webpack config unable resolved; command [build]"); return; } webpack(webpackConfig, (err, stats) => { if (err) { reject(err); return; } formatStats_1.logStatsErrorsAndWarnings(stats); if (stats.hasErrors()) { reject("Build failed with some Compilation errors occurred."); return; } console.log(); cli_shared_utils_1.done("Server side Build complete"); console.log(); resolve(); }); }); }); } start() { return __awaiter(this, void 0, void 0, function* () { const ctx = this.api.getContext(); yield cleanDest_1.cleanDest(ctx, this.outputDir); yield serverRender_1.delay(1000); console.log(); const queue = [this.buildClient]; if (this.projectConfig.ssr) { queue.push(this.buildServer); } yield Promise.all(queue.map((q) => q.call(this))); console.log(); if (this.projectConfig.ssr) { yield buildServerSideDeployFile_1.buildServerSideDeployFIle(this.outputDir); } console.log(); cli_shared_utils_1.done("Build Done 🎉"); ["SIGINT", "SIGTERM"].forEach((signal) => { process.on(signal, () => { process.exit(); }); }); }); } } class BuildWrapper { apply(params) { const { api, projectConfig, args } = params; api.registerCommand("build", { description: "build for production", usage: "luban-cli-service build [options]", options: { "--mode": "specify env mode (default: production)", "--dest": `specify output directory (default: ${projectConfig.outputDir})`, "--report": "generate report.html to help analyze bundle content", }, }, () => __awaiter(this, void 0, void 0, function* () { cli_shared_utils_1.info("Building... \n"); const build = new Build(api, projectConfig, args); yield build.start(); })); } addWebpackConfig(params) { const { api, projectConfig } = params; api.addWebpackConfig("server"); if (projectConfig.ssr) { api.addWebpackConfig("server"); } } } exports.default = BuildWrapper; //# sourceMappingURL=build.js.map