@hyext/builder-neorn
Version:
neo react-native builder for hyext
106 lines (105 loc) • 5 kB
JavaScript
;
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;