From 0cc9ecd72500ba9c24a3950ef11f7c215aca14aa Mon Sep 17 00:00:00 2001 From: Xc Date: Sun, 24 Dec 2023 11:58:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86router=E7=9A=84?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=9E=84=E5=BB=BA=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/web/webpack.config.js | 4 ++-- lib/build.js | 23 +++++++++++------- lib/makeRouter.d.ts | 1 + lib/makeRouter.js | 32 +++++++++++++++++++++++++ scripts/make-router.js | 4 ++++ src/build.ts | 19 +++++++++++---- src/makeRouter.ts | 45 ++++++++++++++++++++++++++++++++++++ 7 files changed, 113 insertions(+), 15 deletions(-) create mode 100644 lib/makeRouter.d.ts create mode 100644 lib/makeRouter.js create mode 100644 scripts/make-router.js create mode 100644 src/makeRouter.ts diff --git a/config/web/webpack.config.js b/config/web/webpack.config.js index d547289..ed8bfe4 100644 --- a/config/web/webpack.config.js +++ b/config/web/webpack.config.js @@ -33,7 +33,7 @@ const createEnvironmentHash = require('./webpack/persistentCache/createEnvironme const oakPathTsxPlugin = require('../babel-plugin/oakPath'); const oakRenderTsxPlugin = require('../babel-plugin/oakRender'); -const oakRouterPlugin = require('../babel-plugin/oakRouter2'); +// const oakRouterPlugin = require('../babel-plugin/oakRouter2'); const oakI18nPlugin = require('../babel-plugin/oakI18n'); const oakStylePlugin = require('../babel-plugin/oakStyle'); const oakRpxToPxPlugin = require('../postcss-plugin/oakRpxToPx'); @@ -547,7 +547,7 @@ module.exports = function (webpackEnv) { ), oakPathTsxPlugin, oakRenderTsxPlugin, - oakRouterPlugin, + // oakRouterPlugin, oakI18nPlugin, // [ // 'import', diff --git a/lib/build.js b/lib/build.js index 5efa24e..fa3303c 100644 --- a/lib/build.js +++ b/lib/build.js @@ -5,27 +5,34 @@ 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) { 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(cmd.target) ? 'wechatMp' : (['native', 'rn'].includes(cmd.target) ? 'native' : 'web'); + } // 先makeLocale - (0, makeLocale_1.default)('', true); + (0, makeLocale_1.default)('', cmd.mode === 'development'); + // 再尝试makeRouter + (0, makeRouter_1.default)({ subdir }, cmd.mode === 'development'); //ts类型检查 waring 还是error, //主要web受影响,error级别的话 控制台和网页都报错,warning级别的话 控制台报错 + // development/staging/production const TSC_COMPILE_ON_ERROR = cmd.check !== 'error'; - (0, tip_style_1.Success)(`${(0, tip_style_1.success)(`build ${cmd.target} environment:${cmd.mode} ${cmd.mode !== 'production' - ? `server:${!!cmd.prod}` - : ''} ${cmd.target !== 'web' && cmd.mode !== 'production' + (0, tip_style_1.Success)(`${(0, tip_style_1.success)(`build ${cmd.target} environment:${cmd.mode} ${['development'].includes(cmd.mode) ? `server:${!!cmd.prod}` : ''} ${['mp', 'wechatMp'].includes(cmd.target) && + ['development'].includes(cmd.mode) ? `split:${!!cmd.split}` : ''}`)}`); if (['mp', 'wechatMp'].includes(cmd.target)) { const result = cross_spawn_1.default.sync(`cross-env`, [ `NODE_ENV=${cmd.mode}`, `NODE_TARGET=${cmd.target}`, - `SUB_DIR_NAME=${cmd.subDir || 'wechatMp'}`, + `SUB_DIR_NAME=${subdir}`, `TSC_COMPILE_ON_ERROR=${TSC_COMPILE_ON_ERROR}`, `COMPILE_ANALYZE=${!!cmd.analyze}`, `GENERATE_SOURCEMAP=${!!cmd.sourcemap}`, @@ -52,7 +59,7 @@ async function build(cmd) { const result = cross_spawn_1.default.sync(`cross-env`, [ `NODE_ENV=${cmd.mode}`, `NODE_TARGET=${cmd.target}`, - `SUB_DIR_NAME=${cmd.subDir || 'web'}`, + `SUB_DIR_NAME=${subdir}`, `TSC_COMPILE_ON_ERROR=${TSC_COMPILE_ON_ERROR}`, `COMPILE_ANALYZE=${!!cmd.analyze}`, `GENERATE_SOURCEMAP=${!!cmd.sourcemap}`, @@ -76,7 +83,7 @@ async function build(cmd) { } else if (['native', 'rn'].includes(cmd.target)) { const prjDir = process.cwd(); - const cwd = (0, path_1.resolve)(prjDir, cmd.subDir || 'native'); + 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 result = spawn.sync( @@ -95,7 +102,7 @@ async function build(cmd) { 'OAK_PLATFORM=native', `PROD=${!!cmd.prod}`, 'react-native', - 'start' + 'start', ].filter(Boolean), { cwd, stdio: 'inherit', diff --git a/lib/makeRouter.d.ts b/lib/makeRouter.d.ts new file mode 100644 index 0000000..df5e8a6 --- /dev/null +++ b/lib/makeRouter.d.ts @@ -0,0 +1 @@ +export default function make(cmd: any, watch?: boolean): Promise; diff --git a/lib/makeRouter.js b/lib/makeRouter.js new file mode 100644 index 0000000..9764664 --- /dev/null +++ b/lib/makeRouter.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const tip_style_1 = require("./tip-style"); +const cross_spawn_1 = tslib_1.__importDefault(require("cross-spawn")); +async function make(cmd, watch) { + (0, tip_style_1.Success)(`${(0, tip_style_1.success)(`make router`)}`); + // node scripts/make-router.js subdir watch + const args = [require.resolve('../scripts/' + 'make-router.js'), cmd.subdir]; + if (watch) { + args.push('true'); + const result = (0, cross_spawn_1.default)('node', args, { + stdio: 'inherit', + shell: true, + }); + (0, tip_style_1.Success)(`${(0, tip_style_1.success)(`make router执行,监控中……`)}`); + return; + } + const result = cross_spawn_1.default.sync('node', args, { + stdio: 'inherit', + shell: true, + }); + // const result2 = spawn.sync('npm -v', [], { stdio: 'inherit', shell: true }); + if (result.status === 0) { + (0, tip_style_1.Success)(`${(0, tip_style_1.success)(`make router执行完成`)}`); + } + else { + (0, tip_style_1.Error)(`${(0, tip_style_1.error)(`make router执行失败`)}`); + process.exit(-1); + } +} +exports.default = make; diff --git a/scripts/make-router.js b/scripts/make-router.js new file mode 100644 index 0000000..60f319a --- /dev/null +++ b/scripts/make-router.js @@ -0,0 +1,4 @@ +const subdir = process.argv[2]; +const watch = process.argv[3]; +const { buildRouter } = require('oak-domain/lib/compiler/routerBuilder'); +buildRouter(process.cwd(), subdir, !!watch); \ No newline at end of file diff --git a/src/build.ts b/src/build.ts index d628e37..1bad5e6 100644 --- a/src/build.ts +++ b/src/build.ts @@ -10,6 +10,7 @@ import { import spawn from 'cross-spawn'; import { resolve } from 'path'; import makeLocale from './makeLocale'; +import makeRouter from './makeRouter'; import { copyFileSync } from 'fs'; export default async function build(cmd: any) { @@ -21,8 +22,16 @@ export default async function build(cmd: any) { ); return; } + let subdir = cmd.subDir; + if (!subdir) { + subdir = ['mp', 'wechatMp'].includes(cmd.target) ? 'wechatMp' : ( + ['native', 'rn'].includes(cmd.target) ? 'native' : 'web' + ); + } // 先makeLocale - makeLocale('', true); + makeLocale('', cmd.mode === 'development'); + // 再尝试makeRouter + makeRouter({ subdir }, cmd.mode === 'development'); //ts类型检查 waring 还是error, //主要web受影响,error级别的话 控制台和网页都报错,warning级别的话 控制台报错 // development/staging/production @@ -45,7 +54,7 @@ export default async function build(cmd: any) { [ `NODE_ENV=${cmd.mode}`, `NODE_TARGET=${cmd.target}`, - `SUB_DIR_NAME=${cmd.subDir || 'wechatMp'}`, + `SUB_DIR_NAME=${subdir}`, `TSC_COMPILE_ON_ERROR=${TSC_COMPILE_ON_ERROR}`, `COMPILE_ANALYZE=${!!cmd.analyze}`, `GENERATE_SOURCEMAP=${!!cmd.sourcemap}`, @@ -78,7 +87,7 @@ export default async function build(cmd: any) { [ `NODE_ENV=${cmd.mode}`, `NODE_TARGET=${cmd.target}`, - `SUB_DIR_NAME=${cmd.subDir || 'web'}`, + `SUB_DIR_NAME=${subdir}`, `TSC_COMPILE_ON_ERROR=${TSC_COMPILE_ON_ERROR}`, `COMPILE_ANALYZE=${!!cmd.analyze}`, `GENERATE_SOURCEMAP=${!!cmd.sourcemap}`, @@ -86,7 +95,7 @@ export default async function build(cmd: any) { !!cmd.memoryLimit && `MEMORY_LIMIT=${cmd.memoryLimit}`, `node`, cmd.memoryLimit && `--max_old_space_size=${cmd.memoryLimit}`, - resolve( + require.resolve( `../scripts/${ cmd.mode === 'production' ? 'build-web.js' @@ -106,7 +115,7 @@ export default async function build(cmd: any) { } } else if (['native', 'rn'].includes(cmd.target)) { const prjDir = process.cwd(); - const cwd = resolve(prjDir, cmd.subDir || 'native'); + const cwd = resolve(prjDir, subdir); copyFileSync( resolve(prjDir, 'package.json'), resolve(cwd, 'package.json') diff --git a/src/makeRouter.ts b/src/makeRouter.ts new file mode 100644 index 0000000..4a685b6 --- /dev/null +++ b/src/makeRouter.ts @@ -0,0 +1,45 @@ +import { + Success, + Error, + error, + primary, + success, + warn, + Warn, +} from './tip-style'; +import spawn from 'cross-spawn'; + +export default async function make(cmd: any, watch?: boolean) { + Success(`${success(`make router`)}`); + // node scripts/make-router.js subdir watch + const args = [require.resolve('../scripts/' + 'make-router.js'), cmd.subdir]; + if (watch) { + args.push('true'); + const result = spawn( + 'node', + args, + { + stdio: 'inherit', + shell: true, + } + ); + Success(`${success(`make router执行,监控中……`)}`); + return; + } + const result = spawn.sync( + 'node', + args, + { + stdio: 'inherit', + shell: true, + } + ); + // const result2 = spawn.sync('npm -v', [], { stdio: 'inherit', shell: true }); + + if (result.status === 0) { + Success(`${success(`make router执行完成`)}`); + } else { + Error(`${error(`make router执行失败`)}`); + process.exit(-1); + } +}