UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

109 lines (108 loc) 4.96 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildProject = void 0; const path_1 = __importDefault(require("path")); const webpack_1 = __importStar(require("webpack")); const fs_extra_1 = require("fs-extra"); const logger_1 = require("../../../utils/logger"); const resolve_project_path_1 = require("../../../utils/resolve-project-path"); const Compressor_1 = __importDefault(require("../../../v1/utils/Compressor")); const paths_1 = require("../../webpack/paths"); const webpack_config_react_1 = require("../../webpack/custom-ui/webpack.config.react"); const get_plugin_profile_for_v2_1 = require("../../../get-plugin-profile-for-v2"); const generate_html_entry_script_1 = require("../../../utils/generate-html-entry-script"); const find_entries_1 = require("../find-entries"); async function buildProject(options) { const { zip } = options || {}; try { (0, fs_extra_1.removeSync)(paths_1.paths.appBuild); logger_1.logger.info(`remove directory: ${paths_1.paths.appBuild}`); } catch (e) { logger_1.logger.warn(`remove directory failed: ${paths_1.paths.appBuild}`); logger_1.logger.debug(e); } const pluginProfile = await (0, get_plugin_profile_for_v2_1.getPluginProfileForV2)(); const [needBuildResources, missedResourceIds] = (0, find_entries_1.findEntries)(pluginProfile); if (missedResourceIds.length) { logger_1.logger.error(`The resource entries for these ids (${missedResourceIds.join(', ')}) are missing in plugin.config.json.`); process.exit(1); } if (!needBuildResources.length) { logger_1.logger.error('No resources need to build, please check the plugin.config.json / developer platform and retry.'); process.exit(1); } const webpackConfigs = pluginProfile.resources.map(resource => { const { id, entry } = resource; return (0, webpack_config_react_1.getWebpackConfigForReact)({ key: id, webpackEnv: 'production', entry: (0, resolve_project_path_1.resolveProjectPath)(entry), generateHtmlTemplate: (jsFiles, cssFiles) => ` <!DOCTYPE html> <html> <head> ${(0, generate_html_entry_script_1.generateHTMLEntryScript)(jsFiles, cssFiles)} </head> <body></body> </html> `, }); }); logger_1.logger.debug(JSON.stringify(webpackConfigs, null, 0)); return new Promise((resolve, reject) => { const multiCompiler = new webpack_1.MultiCompiler(webpackConfigs.map(c => (0, webpack_1.default)(c)), { parallelism: 3 }); multiCompiler.run(async (err, result) => { if (err) { console.error(err.message); reject(err); return; } console.log(result.toString()); if (zip) { try { const buffer = await Compressor_1.default.zipBuffer(paths_1.paths.appBuild); const zipPath = path_1.default.join(paths_1.paths.appBuildZip, `${Date.now()}.zip`); if (!(0, fs_extra_1.pathExistsSync)(paths_1.paths.appBuildZip)) { (0, fs_extra_1.mkdirSync)(paths_1.paths.appBuildZip); } (0, fs_extra_1.writeFileSync)(zipPath, buffer); logger_1.logger.success(`Compress the build files succeed, ${zipPath}`); } catch (e) { logger_1.logger.error(`Compress the build files failed, ${e.message}`); logger_1.logger.debug(e); process.exit(1); } } resolve(result); }); }); } exports.buildProject = buildProject;