156 lines
6.0 KiB
JavaScript
156 lines
6.0 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.default = build;
|
||
const tslib_1 = require("tslib");
|
||
const tip_style_1 = require("./tip-style");
|
||
const cross_spawn_1 = tslib_1.__importDefault(require("cross-spawn"));
|
||
const path_1 = require("path");
|
||
const makeLocale_1 = tslib_1.__importDefault(require("./makeLocale"));
|
||
const makeRouter_1 = tslib_1.__importDefault(require("./makeRouter"));
|
||
const fs_1 = require("fs");
|
||
async function build(cmd) {
|
||
const mode = (cmd.mode || 'development');
|
||
const target = cmd.target;
|
||
const devMode = (cmd.devMode || 'server');
|
||
if (!cmd.target) {
|
||
(0, tip_style_1.Error)(`${(0, tip_style_1.error)(`Please add --target web or --target mp(wechatMp) or --target rn(native) to run the project in Web/WechatMp/ReactNative environment`)}`);
|
||
return;
|
||
}
|
||
let subdir = cmd.subDir;
|
||
if (!subdir) {
|
||
subdir = ['mp', 'wechatMp'].includes(target)
|
||
? 'wechatMp'
|
||
: ['native', 'rn'].includes(target)
|
||
? 'native'
|
||
: 'web';
|
||
}
|
||
// 先makeLocale
|
||
(0, makeLocale_1.default)({
|
||
watch: mode === 'development',
|
||
});
|
||
// 再尝试makeRouter
|
||
(0, makeRouter_1.default)({ subdir }, mode === 'development');
|
||
// makeDependency 放到npm install之后做一次
|
||
// makeDep('');
|
||
(0, tip_style_1.Success)(`${(0, tip_style_1.success)(`build ${target} environment:${mode} ${['development'].includes(mode) ? `devMode:${devMode}` : ''}`)}`);
|
||
if (['mp', 'wechatMp'].includes(target)) {
|
||
const mpFileMap = {
|
||
production: 'build-mp.js',
|
||
staging: 'build-staging-mp.js',
|
||
development: 'start-mp.js',
|
||
};
|
||
const result = cross_spawn_1.default.sync(`cross-env`, [
|
||
`NODE_ENV=${mode}`,
|
||
`NODE_TARGET=${target}`,
|
||
`OAK_DEV_MODE=${devMode}`,
|
||
`SUB_DIR_NAME=${subdir}`,
|
||
`COMPILE_ANALYZE=${!!cmd.analyze}`,
|
||
`GENERATE_SOURCEMAP=${!!cmd.sourcemap}`,
|
||
!!cmd.memoryLimit && `MEMORY_LIMIT=${cmd.memoryLimit}`,
|
||
`node`,
|
||
cmd.memoryLimit && `--max_old_space_size=${cmd.memoryLimit}`,
|
||
cmd.stackSize && `--stack_size=${cmd.stackSize}`,
|
||
(0, path_1.resolve)(__dirname, `../scripts/${mpFileMap[mode]}`),
|
||
].filter(Boolean), {
|
||
stdio: 'inherit',
|
||
shell: true,
|
||
});
|
||
if (result.status === 0) {
|
||
(0, tip_style_1.Success)(`${(0, tip_style_1.success)(`执行完成`)}`);
|
||
}
|
||
else {
|
||
(0, tip_style_1.Error)(`${(0, tip_style_1.error)(`执行失败`)}`);
|
||
}
|
||
}
|
||
else if (target === 'web') {
|
||
const port = cmd.port;
|
||
const webFileMap = {
|
||
production: 'build-web.js',
|
||
staging: 'build-staging-web.js',
|
||
development: 'start-web.js',
|
||
};
|
||
const result = cross_spawn_1.default.sync(`cross-env`, [
|
||
`NODE_ENV=${mode}`,
|
||
`NODE_TARGET=${target}`,
|
||
`OAK_DEV_MODE=${devMode}`,
|
||
`SUB_DIR_NAME=${subdir}`,
|
||
`COMPILE_ANALYZE=${!!cmd.analyze}`,
|
||
`GENERATE_SOURCEMAP=${!!cmd.sourcemap}`,
|
||
`PORT=${port || 3000}`,
|
||
!!cmd.memoryLimit && `MEMORY_LIMIT=${cmd.memoryLimit}`,
|
||
`node`,
|
||
cmd.memoryLimit && `--max_old_space_size=${cmd.memoryLimit}`,
|
||
cmd.stackSize && `--stack_size=${cmd.stackSize}`,
|
||
(0, path_1.resolve)(__dirname, `../scripts/${webFileMap[mode]}`),
|
||
].filter(Boolean), {
|
||
stdio: 'inherit',
|
||
shell: true,
|
||
});
|
||
if (result.status === 0) {
|
||
(0, tip_style_1.Success)(`${(0, tip_style_1.success)(`执行完成`)}`);
|
||
}
|
||
else {
|
||
(0, tip_style_1.Error)(`${(0, tip_style_1.error)(`执行失败`)}`);
|
||
}
|
||
}
|
||
else if (['native', 'rn'].includes(target)) {
|
||
const prjDir = process.cwd();
|
||
const cwd = (0, path_1.resolve)(prjDir, subdir);
|
||
(0, fs_1.copyFileSync)((0, path_1.resolve)(prjDir, 'package.json'), (0, path_1.resolve)(cwd, 'package.json'));
|
||
// rn不支持注入NODE_ENVIRONMENT这样的环境变量,cross-env没有用
|
||
const platform = cmd.platform;
|
||
let result;
|
||
if (mode === 'production') {
|
||
//cd native/android && cross-env NODE_ENV=production ./gradlew assembleRelease
|
||
result = cross_spawn_1.default.sync(`cd android`, [
|
||
'&& cross-env',
|
||
`NODE_ENV=${mode}`,
|
||
'OAK_PLATFORM=native',
|
||
`OAK_DEV_MODE=${devMode}`,
|
||
'./gradlew assembleRelease',
|
||
].filter(Boolean), {
|
||
cwd,
|
||
stdio: 'inherit',
|
||
shell: true,
|
||
});
|
||
}
|
||
else if (mode === 'staging') {
|
||
//cd native/android && cross-env NODE_ENV=production ./gradlew assembleStaging
|
||
result = cross_spawn_1.default.sync(`cd android`, [
|
||
'&& cross-env',
|
||
`NODE_ENV=${mode}`,
|
||
'OAK_PLATFORM=native',
|
||
`OAK_DEV_MODE=${devMode}`,
|
||
'./gradlew assembleStaging',
|
||
].filter(Boolean), {
|
||
cwd,
|
||
stdio: 'inherit',
|
||
shell: true,
|
||
});
|
||
}
|
||
else {
|
||
result = cross_spawn_1.default.sync(`cross-env`, [
|
||
`NODE_ENV=${mode}`,
|
||
'OAK_PLATFORM=native',
|
||
`OAK_DEV_MODE=${devMode}`,
|
||
'react-native',
|
||
'start',
|
||
cmd.resetCache && '--reset-cache',
|
||
].filter(Boolean), {
|
||
cwd,
|
||
stdio: 'inherit',
|
||
shell: true,
|
||
});
|
||
}
|
||
if (result.status === 0) {
|
||
(0, tip_style_1.Success)(`${(0, tip_style_1.success)(`执行完成`)}`);
|
||
}
|
||
else {
|
||
(0, tip_style_1.Error)(`${(0, tip_style_1.error)(`执行失败`)}`);
|
||
}
|
||
}
|
||
else {
|
||
(0, tip_style_1.Error)(`${(0, tip_style_1.error)(`target could only be web or mp(wechatMp) or rn(native)`)}`);
|
||
}
|
||
}
|