UNPKG

@hyext/builder-neorn

Version:

neo react-native builder for hyext

147 lines (146 loc) 6.96 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 }); exports.startServer = exports.buildByProjectConfig = exports.config = exports.providedProjectConfig = exports.verifyApp = exports.verifyAppByBuildConfig = exports.build = exports.start = exports.createApp = void 0; const fs_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const ramda_1 = __importDefault(require("ramda")); const constants_1 = require("./constants"); const createProject_1 = __importDefault(require("./createApp/createProject")); const startServer_1 = __importDefault(require("./start/startServer")); exports.startServer = startServer_1.default; const buildByProjectConfig_1 = __importDefault(require("./build/buildByProjectConfig")); exports.buildByProjectConfig = buildByProjectConfig_1.default; const inquirer_1 = __importDefault(require("inquirer")); const utils_1 = require("./lib/utils"); const getProviderByHostId_1 = __importDefault(require("./infoProvider/getProviderByHostId")); const RNVersion = process.env.HYEXT_RN_VER || '0.62.2'; // logger.info(`\nRN Version: ${RNVersion}`) function selectExtTypes(extTypes) { return __awaiter(this, void 0, void 0, function* () { const selectedTypes = yield inquirer_1.default.prompt([ { type: 'checkbox', name: 'buildTypes', message: '选择需要开发的小程序类型', choices: extTypes.filter(item => item.runTerminal.toLowerCase() === 'app').map((item) => ({ name: item.typeName, value: item.typeTag, })) } ]).then(answer => answer.buildTypes); return extTypes .filter((item) => selectedTypes.includes(item.typeTag)) .map(item => ({ extType: item.typeTag, platform: item.runTerminal.toLowerCase(), npmPackageName: item.npmPackageName, })); }); } const getExtName = ramda_1.default.prop('name'); const detectHyCssLoaderOption = ramda_1.default.compose(ramda_1.default.defaultTo(true), ramda_1.default.path(['builder', 'config', 'useCssLoader'])); function createApp(options) { return __awaiter(this, void 0, void 0, function* () { const { projectName, contextPath, config, inputPath, outputPath, publicPath, hostExtTypes } = options; let hostId = (hostExtTypes && hostExtTypes[0].hostId) || 'huyaext'; if (hostExtTypes.length > 1) { hostId = yield inquirer_1.default.prompt([ { type: 'list', name: 'hostId', message: '小程序将运行在哪个平台', choices: hostExtTypes.map((item) => ({ name: item.hostName || item.hostId, value: item.hostId, })) } ]).then(answer => answer.hostId); } const selectedHost = hostExtTypes.find(x => x.hostId === hostId); const selectedTypes = yield selectExtTypes(selectedHost.extTypes); const infoProvider = getProviderByHostId_1.default(hostId)({ projectRoot: contextPath, dependencies: {}, }); return createProject_1.default({ projectName, projectRoot: contextPath, config, inputPath, outputPath, publicPath, hostId, buildTypes: selectedTypes, }); }); } exports.createApp = createApp; function start(options) { return startServer_1.default(Object.assign(Object.assign({}, options), { RNVersion })); } exports.start = start; function build({ projectName, config, inputPath, outputPath, publicPath }) { const projectConfig = fs_extra_1.default.readJsonSync(path_1.default.resolve(inputPath, 'project.config.json')); return buildByProjectConfig_1.default({ extUuid: projectName, extName: getExtName(projectConfig), projectRoot: inputPath, outputDir: outputPath, publicPath, config, buildConfig: ramda_1.default.prop('buildConfig', config), // isUseHyCssLoader: detectHyCssLoaderOption(projectConfig) as boolean, RNVersion, }); } exports.build = build; exports.verifyAppByBuildConfig = ({ projectRoot, config }) => { return new Promise((resolve, reject) => { if (!fs_extra_1.default.existsSync(path_1.default.resolve(projectRoot, 'package.json'))) { reject(new Error('打包前请先安装项目依赖, 并确保生成 package.json 文件')); return; } if (!fs_extra_1.default.existsSync(path_1.default.resolve(projectRoot, constants_1.CONFIG_FILE))) { reject(new Error(`未找到项目配置文件: ${constants_1.CONFIG_FILE}`)); return; } resolve(); }); }; function verifyApp({ contextPath: projectRoot }) { const projectConfig = fs_extra_1.default.readJsonSync(path_1.default.resolve(projectRoot, 'project.config.json')); const builderConfig = projectConfig.builder.config; return exports.verifyAppByBuildConfig({ projectRoot, config: builderConfig }); } exports.verifyApp = verifyApp; exports.providedProjectConfig = (payload = { config: {} }) => { const { config } = payload; const hostId = utils_1.getHostId(config); const infoProvider = getProviderByHostId_1.default(hostId)({ projectRoot: process.cwd(), dependencies: {}, }); return infoProvider.projectConfig; }; function config({ contextPath, builderInfo, hostExtTypes }) { return __awaiter(this, void 0, void 0, function* () { const cfgPath = path_1.default.resolve(contextPath, 'project.config.json'); const cfgContent = fs_extra_1.default.readJsonSync(cfgPath); const selectedHost = hostExtTypes.find(x => x.hostId === builderInfo.config.hostId || 'huyaext'); const selectedTypes = yield selectExtTypes(selectedHost.extTypes); console.log('selectExtTypes', selectedTypes); }); } exports.config = config;