UNPKG

@hyext/builder-neorn

Version:

neo react-native builder for hyext

106 lines (105 loc) 5 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 fs_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); const ramda_1 = __importDefault(require("ramda")); const matrix_compiler_1 = require("@hyext/matrix-compiler"); const utils_1 = require("../lib/utils"); const getProviderByHostId_1 = __importDefault(require("../infoProvider/getProviderByHostId")); function start({ config, inputPath: projectRoot, onBefore, metroConfig = {}, RNVersion, }) { return __awaiter(this, void 0, void 0, function* () { if (!fs_extra_1.default.existsSync(path_1.default.resolve(projectRoot, 'project.config.json'))) { utils_1.logger.error(`\nproject.config.json 未找到, 请确保本项目由命令 "npx hyext init <extname>" 生成\n`); process.exit(1); } const buildConfig = ramda_1.default.prop('buildConfig', config); const hostId = config.hostId || 'huyaext'; const pkgContent = fs_extra_1.default.readJsonSync(path_1.default.resolve(projectRoot, 'package.json')); const infoProvider = getProviderByHostId_1.default(hostId)({ projectRoot, buildConfig, dependencies: Object.assign(Object.assign({}, pkgContent.dependencies || {}), pkgContent.devDependencies || {}), RNVersion, isDev: true, }); const { isValid, message } = infoProvider.SDKVersionValidation; if (!isValid) { // 开发环境通不过校验直接退出 utils_1.logger.error(message); process.exit(1); } const shouldInstallSDKVer = infoProvider.shouldInstallSDKVer; if (typeof onBefore === 'function') { yield onBefore({ SDKNames: Object.keys(shouldInstallSDKVer), }); } if (RNVersion === '0.62.2') { matrix_compiler_1.compiler.devServer({ projectRoot, metroConfig, interactive: true, }); } else { /* * 本地不再需要使用 0.58.5 了 * 这里先留着吧 */ const metroConfigAbsPath = matrix_compiler_1.deprecatedCompiler.generateMetroCfg({ projectRoot, imageBaseURL: '', filterModulesPath: '', mode: 'dev', cfgOutputDir: os_1.default.tmpdir(), useHyCSS: true, }); const getCfgPathFromArgs = (args) => { if (args && args.length > 2) { const idx = args.indexOf('--config'); if (idx + 1 < args.length && args[idx + 1]) { return args[idx + 1]; } } }; matrix_compiler_1.deprecatedCompiler.devServer({ projectRoot, metroConfigAbsPath: metroConfigAbsPath, }); } const devServerOrigin = `http://${utils_1.getPublicIP(config)}:8081/`; const buildResult = matrix_compiler_1.utils.generateDevBuildResult({ builderName: '@hyext/builder-neorn', devServerOrigin, buildResultConfig: ramda_1.default.flatten(buildConfig.map(({ entry, extType, registerComponent }) => { const registerComponents = matrix_compiler_1.utils.getRegisterComponents({ entryFileContent: fs_extra_1.default.readFileSync(path_1.default.resolve(projectRoot, entry)).toString(), configComponents: registerComponent, }); return ['ios', 'android'].map(platform => ({ extType, bundleRelativePath: entry.replace(/\.js$/g, '.bundle'), registerComponents: registerComponents.map((name) => ({ name })), platform, SDKVersion: '100.0.0', })); })), }); return buildResult; }); } exports.default = start; module.exports = start;