@hyext/builder-neorn
Version:
neo react-native builder for hyext
147 lines (146 loc) • 6.96 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 });
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;