lcd-router-webpack-plugin 9.0.0-alpha.5 → 9.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +23 -3
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +26 -10
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAI/D,OAAO,EAAyB,OAAO,EAAe,MAAM,SAAS,CAAC;AAOtE,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,qBAAqB;IAC1E,OAAO,EAAE,OAAO,CAAC;gBACL,OAAO,EAAE,OAAO;IAI5B,KAAK,CAAC,QAAQ,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAI/D,OAAO,EAAyB,OAAO,EAAe,MAAM,SAAS,CAAC;AAOtE,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,qBAAqB;IAC1E,OAAO,EAAE,OAAO,CAAC;gBACL,OAAO,EAAE,OAAO;IAI5B,KAAK,CAAC,QAAQ,EAAE,QAAQ;IA8LxB,YAAY,CAAC,QAAQ,EAAE,QAAQ;CAYhC"}
|
package/lib/index.js
CHANGED
|
@@ -42,22 +42,42 @@ class LcdRouterWebpackPlugin {
|
|
|
42
42
|
const currentDir = _nodePath.default.dirname(filepath);
|
|
43
43
|
const absCurrentDir = _nodePath.default.dirname(absFilePath);
|
|
44
44
|
const chunkCode = [];
|
|
45
|
+
const meJSON = fileService.readJSONSync(absFilePath);
|
|
45
46
|
try {
|
|
46
47
|
const reducerPath = resolver.getReducerFile(absCurrentDir);
|
|
47
48
|
chunkCode.push(`export { default as reducer } from '${reducerPath}';`);
|
|
48
49
|
} catch (e) {
|
|
49
50
|
// feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers
|
|
51
|
+
if (meJSON.mobx) {
|
|
52
|
+
/**
|
|
53
|
+
* mobx 模式下, 需要垫一个被 mobx-adapter 包裹的 reducer 函数
|
|
54
|
+
* 如果存在reducer文件,是默认会被 babel-plugin-enhance-reducer 处理的
|
|
55
|
+
*
|
|
56
|
+
* import storeHoc from 'rrc-loader-helper/lib/mobx-adapter';
|
|
57
|
+
* export const reducer = storeHoc({
|
|
58
|
+
* state: {},
|
|
59
|
+
* }, 'report/other-table')
|
|
60
|
+
*
|
|
61
|
+
* 不太方便去垫一个 reducer 函数,reducer 的路径计算比较复杂, 所以直接报错
|
|
62
|
+
* 同时,从逻辑上讲,如果开启了 mobx,那么必须要有 reducer 文件
|
|
63
|
+
*/
|
|
64
|
+
throw Error('开启 mobx 后,reducer 文件必须存在');
|
|
65
|
+
}
|
|
50
66
|
chunkCode.push(`export function reducer(){ return {} }`);
|
|
51
67
|
}
|
|
52
68
|
const viewPath = resolver.getViewFile(absCurrentDir);
|
|
53
69
|
chunkCode.push(`export { default as view } from '${viewPath}';`);
|
|
54
|
-
const meJSON = fileService.readJSONSync(absFilePath);
|
|
55
70
|
if (meJSON.theme && !options.theme?.hash) {
|
|
56
71
|
throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);
|
|
57
72
|
}
|
|
58
73
|
if (!meJSON.mobx) {
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
try {
|
|
75
|
+
const sagaPath = resolver.getSagaFile(absCurrentDir);
|
|
76
|
+
chunkCode.push(`export { default as saga } from '${sagaPath}';`);
|
|
77
|
+
} catch (e) {
|
|
78
|
+
// feat: saga 也可以不存在, 方便结合reactive 和 ak,默认创建一个reducers
|
|
79
|
+
chunkCode.push(`export function saga*(){ return {} }`);
|
|
80
|
+
}
|
|
61
81
|
}
|
|
62
82
|
if (meJSON.errorComponent) {
|
|
63
83
|
const errorCompPath = resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_globby","_interopRequireDefault","require","_chokidar","_deepmerge","_utils","_ReducersGenerator","_SagasGenerator","_RoutersGenerator","_nodePath","obj","__esModule","default","LcdRouterWebpackPlugin","options","constructor","apply","compiler","mergeOptions","hooks","afterPlugins","tap","pathService","PathService","resolver","Resolver","fileService","FileService","reducersGenerator","ReducersGenerator","sagasGenerator","SagasGenerator","routersGenerator","RoutersGenerator","isDev","mode","process","env","NODE_ENV","writeCode","writeCodeToFile","getReducersCacheFileAbs","getSagasCacheFileAbs","getRoutersCacheFileAbs","resolveFile","filepath","absFilePath","getCurrentFileAbs","currentDir","path","dirname","absCurrentDir","chunkCode","reducerPath","getReducerFile","push","e","viewPath","getViewFile","meJSON","readJSONSync","theme","hash","Error","mobx","sagaPath","getSagaFile","errorComponent","errorCompPath","getErrorComFile","themePath","getThemeJSCacheFileAbs","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","writeMeJSONFile","isExternal","externals","some","x","hasChildStore","globby","sync","reducerName","cwd","length","set","namespace","page","exact","RegExp","index","test","_key","replace","list","getPageRootAbs","console","warn","sortedList","map","sort","a","b","startsWith","localeCompare","dir","forEach","watcher","chokidar","watch","ignoreInitial","fn","on","defaultOptions","context","enablePreFetch","pageDir","disableBuiltInRoute","deepmerge","exports"],"sources":["../index.ts"],"sourcesContent":["import type { Compiler, WebpackPluginInstance } from 'webpack';\nimport globby from 'globby';\nimport chokidar from 'chokidar';\nimport deepmerge from 'deepmerge';\nimport { PathService, Resolver, Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport default class LcdRouterWebpackPlugin implements WebpackPluginInstance {\n options: Options;\n constructor(options: Options) {\n this.options = options;\n }\n\n apply(compiler: Compiler) {\n this.mergeOptions(compiler);\n\n compiler.hooks.afterPlugins.tap('LcdRouterWebpackPlugin', (compiler) => {\n const options = this.options;\n\n const pathService = new PathService(options);\n const resolver = new Resolver(compiler, options);\n const fileService = new FileService(pathService);\n\n const reducersGenerator = new ReducersGenerator();\n const sagasGenerator = new SagasGenerator();\n const routersGenerator = new RoutersGenerator(options, pathService);\n\n function isDev(compiler) {\n if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production')\n return false;\n return true;\n }\n\n function writeCode() {\n reducersGenerator.writeCodeToFile(pathService.getReducersCacheFileAbs());\n sagasGenerator.writeCodeToFile(pathService.getSagasCacheFileAbs());\n routersGenerator.writeCodeToFile(pathService.getRoutersCacheFileAbs());\n }\n\n function resolveFile(filepath: string) {\n const absFilePath = pathService.getCurrentFileAbs(filepath);\n const currentDir = path.dirname(filepath);\n const absCurrentDir = path.dirname(absFilePath);\n\n const chunkCode = [] as string[];\n try {\n const reducerPath = resolver.getReducerFile(absCurrentDir);\n chunkCode.push(`export { default as reducer } from '${reducerPath}';`);\n } catch (e) {\n // feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n const viewPath = resolver.getViewFile(absCurrentDir);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n\n const meJSON = fileService.readJSONSync(absFilePath);\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n if (!meJSON.mobx) {\n const sagaPath = resolver.getSagaFile(absCurrentDir);\n chunkCode.push(`export { default as saga } from '${sagaPath}';`);\n }\n\n if (meJSON.errorComponent) {\n const errorCompPath = resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${errorCompPath}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemeJSCacheFileAbs(options.theme?.hash);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n if (meJSON.theme) {\n fileService.writeThemeFile(meJSON.theme, 'toGlobalTheme');\n const themePath = pathService.getThemeJSCacheFileAbs(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\n\n const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n\n // 处理是否存在多store的场景\n const hasChildStore =\n globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;\n if (hasChildStore && (meJSON.sync || isExternal)) {\n throw Error(\n `如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`,\n );\n }\n\n /** reducers.js */\n reducersGenerator.set(filepath, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONPath: meJSONPath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(absCurrentDir)) {\n const _key = absCurrentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: absCurrentDir,\n path: _key,\n exact: true,\n meJSONPath: meJSONPath,\n });\n }\n }\n\n if (options.theme?.hash) {\n fileService.writeThemeFile(options.theme.hash, 'toGlobalTheme');\n }\n\n const list = globby.sync('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n });\n\n if (list.length === 0) {\n console.warn('没有找到me.json文件');\n }\n\n /**\n * glob 的排序 是包含文件名 me.json 的完整路径,存在问题\n * 比如 会将 /xx/ss/me.json 排到 /xx/ss/zz/me.json 前面\n * glob 的 noSort option 会将 文件夹排到前面, 因此需要手动排序, 并且统一成 globby, 速度更快\n */\n const sortedList = list\n .map((filepath) => filepath?.replace(/me.json$/, ''))\n .sort((a, b) => {\n if (a?.startsWith(b)) return -1;\n return a.localeCompare(b, 'en');\n })\n .map((dir) => `${dir}me.json`);\n\n sortedList.forEach((filepath) => {\n resolveFile(filepath);\n });\n\n writeCode();\n\n if (isDev(compiler)) {\n const watcher = chokidar.watch('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n ignoreInitial: true,\n });\n const fn = async (filepath) => {\n await resolveFile(filepath);\n writeCode();\n };\n watcher.on('add', fn);\n watcher.on('addDir', fn);\n watcher.on('change', fn);\n watcher.on('unlink', fn);\n watcher.on('unlinkDir', fn);\n watcher.on('error', fn);\n }\n });\n }\n\n mergeOptions(compiler: Compiler) {\n const defaultOptions = {\n context: compiler.context,\n enablePreFetch: false,\n index: 'list',\n externals: [],\n pageDir: 'component',\n reducerName: 'reducers',\n disableBuiltInRoute: false,\n };\n this.options = deepmerge(defaultOptions, this.options);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_globby","_interopRequireDefault","require","_chokidar","_deepmerge","_utils","_ReducersGenerator","_SagasGenerator","_RoutersGenerator","_nodePath","obj","__esModule","default","LcdRouterWebpackPlugin","options","constructor","apply","compiler","mergeOptions","hooks","afterPlugins","tap","pathService","PathService","resolver","Resolver","fileService","FileService","reducersGenerator","ReducersGenerator","sagasGenerator","SagasGenerator","routersGenerator","RoutersGenerator","isDev","mode","process","env","NODE_ENV","writeCode","writeCodeToFile","getReducersCacheFileAbs","getSagasCacheFileAbs","getRoutersCacheFileAbs","resolveFile","filepath","absFilePath","getCurrentFileAbs","currentDir","path","dirname","absCurrentDir","chunkCode","meJSON","readJSONSync","reducerPath","getReducerFile","push","e","mobx","Error","viewPath","getViewFile","theme","hash","sagaPath","getSagaFile","errorComponent","errorCompPath","getErrorComFile","themePath","getThemeJSCacheFileAbs","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","writeMeJSONFile","isExternal","externals","some","x","hasChildStore","globby","sync","reducerName","cwd","length","set","namespace","page","exact","RegExp","index","test","_key","replace","list","getPageRootAbs","console","warn","sortedList","map","sort","a","b","startsWith","localeCompare","dir","forEach","watcher","chokidar","watch","ignoreInitial","fn","on","defaultOptions","context","enablePreFetch","pageDir","disableBuiltInRoute","deepmerge","exports"],"sources":["../index.ts"],"sourcesContent":["import type { Compiler, WebpackPluginInstance } from 'webpack';\nimport globby from 'globby';\nimport chokidar from 'chokidar';\nimport deepmerge from 'deepmerge';\nimport { PathService, Resolver, Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport default class LcdRouterWebpackPlugin implements WebpackPluginInstance {\n options: Options;\n constructor(options: Options) {\n this.options = options;\n }\n\n apply(compiler: Compiler) {\n this.mergeOptions(compiler);\n\n compiler.hooks.afterPlugins.tap('LcdRouterWebpackPlugin', (compiler) => {\n const options = this.options;\n\n const pathService = new PathService(options);\n const resolver = new Resolver(compiler, options);\n const fileService = new FileService(pathService);\n\n const reducersGenerator = new ReducersGenerator();\n const sagasGenerator = new SagasGenerator();\n const routersGenerator = new RoutersGenerator(options, pathService);\n\n function isDev(compiler) {\n if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production') return false;\n return true;\n }\n\n function writeCode() {\n reducersGenerator.writeCodeToFile(pathService.getReducersCacheFileAbs());\n sagasGenerator.writeCodeToFile(pathService.getSagasCacheFileAbs());\n routersGenerator.writeCodeToFile(pathService.getRoutersCacheFileAbs());\n }\n\n function resolveFile(filepath: string) {\n const absFilePath = pathService.getCurrentFileAbs(filepath);\n const currentDir = path.dirname(filepath);\n const absCurrentDir = path.dirname(absFilePath);\n\n const chunkCode = [] as string[];\n const meJSON = fileService.readJSONSync(absFilePath);\n try {\n const reducerPath = resolver.getReducerFile(absCurrentDir);\n chunkCode.push(`export { default as reducer } from '${reducerPath}';`);\n } catch (e) {\n // feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n if (meJSON.mobx) {\n /**\n * mobx 模式下, 需要垫一个被 mobx-adapter 包裹的 reducer 函数\n * 如果存在reducer文件,是默认会被 babel-plugin-enhance-reducer 处理的\n *\n * import storeHoc from 'rrc-loader-helper/lib/mobx-adapter';\n * export const reducer = storeHoc({\n * state: {},\n * }, 'report/other-table')\n *\n * 不太方便去垫一个 reducer 函数,reducer 的路径计算比较复杂, 所以直接报错\n * 同时,从逻辑上讲,如果开启了 mobx,那么必须要有 reducer 文件\n */\n throw Error('开启 mobx 后,reducer 文件必须存在');\n }\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n const viewPath = resolver.getViewFile(absCurrentDir);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n if (!meJSON.mobx) {\n try {\n const sagaPath = resolver.getSagaFile(absCurrentDir);\n chunkCode.push(`export { default as saga } from '${sagaPath}';`);\n } catch (e) {\n // feat: saga 也可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n chunkCode.push(`export function saga*(){ return {} }`);\n }\n }\n\n if (meJSON.errorComponent) {\n const errorCompPath = resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${errorCompPath}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemeJSCacheFileAbs(options.theme?.hash);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n if (meJSON.theme) {\n fileService.writeThemeFile(meJSON.theme, 'toGlobalTheme');\n const themePath = pathService.getThemeJSCacheFileAbs(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\n\n const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n\n // 处理是否存在多store的场景\n const hasChildStore = globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;\n if (hasChildStore && (meJSON.sync || isExternal)) {\n throw Error(`如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`);\n }\n\n /** reducers.js */\n reducersGenerator.set(filepath, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONPath: meJSONPath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(absCurrentDir)) {\n const _key = absCurrentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: absCurrentDir,\n path: _key,\n exact: true,\n meJSONPath: meJSONPath,\n });\n }\n }\n\n if (options.theme?.hash) {\n fileService.writeThemeFile(options.theme.hash, 'toGlobalTheme');\n }\n\n const list = globby.sync('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n });\n\n if (list.length === 0) {\n console.warn('没有找到me.json文件');\n }\n\n /**\n * glob 的排序 是包含文件名 me.json 的完整路径,存在问题\n * 比如 会将 /xx/ss/me.json 排到 /xx/ss/zz/me.json 前面\n * glob 的 noSort option 会将 文件夹排到前面, 因此需要手动排序, 并且统一成 globby, 速度更快\n */\n const sortedList = list\n .map((filepath) => filepath?.replace(/me.json$/, ''))\n .sort((a, b) => {\n if (a?.startsWith(b)) return -1;\n return a.localeCompare(b, 'en');\n })\n .map((dir) => `${dir}me.json`);\n\n sortedList.forEach((filepath) => {\n resolveFile(filepath);\n });\n\n writeCode();\n\n if (isDev(compiler)) {\n const watcher = chokidar.watch('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n ignoreInitial: true,\n });\n const fn = async (filepath) => {\n await resolveFile(filepath);\n writeCode();\n };\n watcher.on('add', fn);\n watcher.on('addDir', fn);\n watcher.on('change', fn);\n watcher.on('unlink', fn);\n watcher.on('unlinkDir', fn);\n watcher.on('error', fn);\n }\n });\n }\n\n mergeOptions(compiler: Compiler) {\n const defaultOptions = {\n context: compiler.context,\n enablePreFetch: false,\n index: 'list',\n externals: [],\n pageDir: 'component',\n reducerName: 'reducers',\n disableBuiltInRoute: false,\n };\n this.options = deepmerge(defaultOptions, this.options);\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AAEA,IAAAO,SAAA,GAAAR,sBAAA,CAAAC,OAAA;AAA6B,SAAAD,uBAAAS,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEd,MAAMG,sBAAsB,CAAkC;EAC3EC,OAAO;EACPC,WAAWA,CAACD,OAAgB,EAAE;IAC5B,IAAI,CAACA,OAAO,GAAGA,OAAO;EACxB;EAEAE,KAAKA,CAACC,QAAkB,EAAE;IACxB,IAAI,CAACC,YAAY,CAACD,QAAQ,CAAC;IAE3BA,QAAQ,CAACE,KAAK,CAACC,YAAY,CAACC,GAAG,CAAC,wBAAwB,EAAGJ,QAAQ,IAAK;MACtE,MAAMH,OAAO,GAAG,IAAI,CAACA,OAAO;MAE5B,MAAMQ,WAAW,GAAG,IAAIC,kBAAW,CAACT,OAAO,CAAC;MAC5C,MAAMU,QAAQ,GAAG,IAAIC,eAAQ,CAACR,QAAQ,EAAEH,OAAO,CAAC;MAChD,MAAMY,WAAW,GAAG,IAAIC,kBAAW,CAACL,WAAW,CAAC;MAEhD,MAAMM,iBAAiB,GAAG,IAAIC,oCAAiB,EAAE;MACjD,MAAMC,cAAc,GAAG,IAAIC,8BAAc,EAAE;MAC3C,MAAMC,gBAAgB,GAAG,IAAIC,kCAAgB,CAACnB,OAAO,EAAEQ,WAAW,CAAC;MAEnE,SAASY,KAAKA,CAACjB,QAAQ,EAAE;QACvB,IAAIA,QAAQ,CAACH,OAAO,CAACqB,IAAI,KAAK,YAAY,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE,OAAO,KAAK;QACjG,OAAO,IAAI;MACb;MAEA,SAASC,SAASA,CAAA,EAAG;QACnBX,iBAAiB,CAACY,eAAe,CAAClB,WAAW,CAACmB,uBAAuB,EAAE,CAAC;QACxEX,cAAc,CAACU,eAAe,CAAClB,WAAW,CAACoB,oBAAoB,EAAE,CAAC;QAClEV,gBAAgB,CAACQ,eAAe,CAAClB,WAAW,CAACqB,sBAAsB,EAAE,CAAC;MACxE;MAEA,SAASC,WAAWA,CAACC,QAAgB,EAAE;QACrC,MAAMC,WAAW,GAAGxB,WAAW,CAACyB,iBAAiB,CAACF,QAAQ,CAAC;QAC3D,MAAMG,UAAU,GAAGC,iBAAI,CAACC,OAAO,CAACL,QAAQ,CAAC;QACzC,MAAMM,aAAa,GAAGF,iBAAI,CAACC,OAAO,CAACJ,WAAW,CAAC;QAE/C,MAAMM,SAAS,GAAG,EAAc;QAChC,MAAMC,MAAM,GAAG3B,WAAW,CAAC4B,YAAY,CAACR,WAAW,CAAC;QACpD,IAAI;UACF,MAAMS,WAAW,GAAG/B,QAAQ,CAACgC,cAAc,CAACL,aAAa,CAAC;UAC1DC,SAAS,CAACK,IAAI,CAAE,wCAAuCF,WAAY,IAAG,CAAC;QACzE,CAAC,CAAC,OAAOG,CAAC,EAAE;UACV;UACA,IAAIL,MAAM,CAACM,IAAI,EAAE;YACf;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;YACY,MAAMC,KAAK,CAAC,0BAA0B,CAAC;UACzC;UACAR,SAAS,CAACK,IAAI,CAAE,wCAAuC,CAAC;QAC1D;QAEA,MAAMI,QAAQ,GAAGrC,QAAQ,CAACsC,WAAW,CAACX,aAAa,CAAC;QACpDC,SAAS,CAACK,IAAI,CAAE,qCAAoCI,QAAS,IAAG,CAAC;QAEjE,IAAIR,MAAM,CAACU,KAAK,IAAI,CAACjD,OAAO,CAACiD,KAAK,EAAEC,IAAI,EAAE;UACxC,MAAMJ,KAAK,CAAE,uBAAsBd,WAAY,EAAC,CAAC;QACnD;QAEA,IAAI,CAACO,MAAM,CAACM,IAAI,EAAE;UAChB,IAAI;YACF,MAAMM,QAAQ,GAAGzC,QAAQ,CAAC0C,WAAW,CAACf,aAAa,CAAC;YACpDC,SAAS,CAACK,IAAI,CAAE,qCAAoCQ,QAAS,IAAG,CAAC;UACnE,CAAC,CAAC,OAAOP,CAAC,EAAE;YACV;YACAN,SAAS,CAACK,IAAI,CAAE,sCAAqC,CAAC;UACxD;QACF;QAEA,IAAIJ,MAAM,CAACc,cAAc,EAAE;UACzB,MAAMC,aAAa,GAAG5C,QAAQ,CAAC6C,eAAe,CAAClB,aAAa,EAAEE,MAAM,CAACc,cAAc,CAAC;UACpFf,SAAS,CAACK,IAAI,CAAE,+CAA8CW,aAAc,IAAG,CAAC;QAClF;QAEA,IAAItD,OAAO,CAACiD,KAAK,EAAEC,IAAI,EAAE;UACvB,MAAMM,SAAS,GAAGhD,WAAW,CAACiD,sBAAsB,CAACzD,OAAO,CAACiD,KAAK,EAAEC,IAAI,CAAC;UACzEZ,SAAS,CAACK,IAAI,CAAE,kBAAiBa,SAAU,IAAG,CAAC;QACjD;QAEA,IAAIjB,MAAM,CAACU,KAAK,EAAE;UAChBrC,WAAW,CAAC8C,cAAc,CAACnB,MAAM,CAACU,KAAK,EAAE,eAAe,CAAC;UACzD,MAAMO,SAAS,GAAGhD,WAAW,CAACiD,sBAAsB,CAAClB,MAAM,CAACU,KAAK,CAAC;UAClEX,SAAS,CAACK,IAAI,CAAE,kBAAiBa,SAAU,IAAG,CAAC;QACjD;QAEA,MAAMG,UAAU,GAAGnD,WAAW,CAACoD,qBAAqB,CAAC7B,QAAQ,CAAC;QAE9DnB,WAAW,CAACiD,eAAe,CAACF,UAAU,EAAErB,SAAS,CAAC;QAElD,MAAMwB,UAAU,GAAG9D,OAAO,CAAC+D,SAAS,EAAEC,IAAI,GAAIC,CAAC,IAAKA,CAAC,KAAK9B,iBAAI,CAACC,OAAO,CAACL,QAAQ,CAAC,CAAC,IAAI,KAAK;;QAE1F;QACA,MAAMmC,aAAa,GAAGC,eAAM,CAACC,IAAI,CAAE,QAAOpE,OAAO,CAACqE,WAAY,SAAQ,EAAE;UAAEC,GAAG,EAAEjC;QAAc,CAAC,CAAC,CAACkC,MAAM,GAAG,CAAC;QAC1G,IAAIL,aAAa,KAAK3B,MAAM,CAAC6B,IAAI,IAAIN,UAAU,CAAC,EAAE;UAChD,MAAMhB,KAAK,CAAE,mDAAkDT,aAAc,EAAC,CAAC;QACjF;;QAEA;QACAvB,iBAAiB,CAAC0D,GAAG,CAACzC,QAAQ,EAAE;UAC9BQ,MAAM;UACNuB,UAAU;UACVW,SAAS,EAAEvC,UAAU;UACrByB,UAAU,EAAEA;QACd,CAAC,CAAC;;QAEF;QACA3C,cAAc,CAACwD,GAAG,CAACtC,UAAU,EAAE;UAC7BK,MAAM;UACNuB,UAAU;UACVW,SAAS,EAAEvC,UAAU;UACrByB,UAAU,EAAEA;QACd,CAAC,CAAC;;QAEF;QACAzC,gBAAgB,CAACsD,GAAG,CAACtC,UAAU,EAAE;UAC/BK,MAAM;UACNuB,UAAU;UACVY,IAAI,EAAExC,UAAU;UAChBC,IAAI,EAAED,UAAU;UAChByC,KAAK,EAAE,KAAK;UACZhB,UAAU,EAAEA;QACd,CAAC,CAAC;;QAEF;QACA,IAAI,IAAIiB,MAAM,CAAE,KAAI5E,OAAO,CAAC6E,KAAM,GAAE,CAAC,CAACC,IAAI,CAACzC,aAAa,CAAC,EAAE;UACzD,MAAM0C,IAAI,GAAG1C,aAAa,CAAC2C,OAAO,CAAC,IAAIJ,MAAM,CAAE,KAAI5E,OAAO,CAAC6E,KAAM,GAAE,CAAC,EAAE,EAAE,CAAC;UACzE3D,gBAAgB,CAACsD,GAAG,CAACO,IAAI,EAAE;YACzBxC,MAAM;YACNuB,UAAU;YACVY,IAAI,EAAErC,aAAa;YACnBF,IAAI,EAAE4C,IAAI;YACVJ,KAAK,EAAE,IAAI;YACXhB,UAAU,EAAEA;UACd,CAAC,CAAC;QACJ;MACF;MAEA,IAAI3D,OAAO,CAACiD,KAAK,EAAEC,IAAI,EAAE;QACvBtC,WAAW,CAAC8C,cAAc,CAAC1D,OAAO,CAACiD,KAAK,CAACC,IAAI,EAAE,eAAe,CAAC;MACjE;MAEA,MAAM+B,IAAI,GAAGd,eAAM,CAACC,IAAI,CAAC,YAAY,EAAE;QACrCE,GAAG,EAAE9D,WAAW,CAAC0E,cAAc;MACjC,CAAC,CAAC;MAEF,IAAID,IAAI,CAACV,MAAM,KAAK,CAAC,EAAE;QACrBY,OAAO,CAACC,IAAI,CAAC,eAAe,CAAC;MAC/B;;MAEA;AACN;AACA;AACA;AACA;MACM,MAAMC,UAAU,GAAGJ,IAAI,CACpBK,GAAG,CAAEvD,QAAQ,IAAKA,QAAQ,EAAEiD,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACpDO,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;QACd,IAAID,CAAC,EAAEE,UAAU,CAACD,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAOD,CAAC,CAACG,aAAa,CAACF,CAAC,EAAE,IAAI,CAAC;MACjC,CAAC,CAAC,CACDH,GAAG,CAAEM,GAAG,IAAM,GAAEA,GAAI,SAAQ,CAAC;MAEhCP,UAAU,CAACQ,OAAO,CAAE9D,QAAQ,IAAK;QAC/BD,WAAW,CAACC,QAAQ,CAAC;MACvB,CAAC,CAAC;MAEFN,SAAS,EAAE;MAEX,IAAIL,KAAK,CAACjB,QAAQ,CAAC,EAAE;QACnB,MAAM2F,OAAO,GAAGC,iBAAQ,CAACC,KAAK,CAAC,YAAY,EAAE;UAC3C1B,GAAG,EAAE9D,WAAW,CAAC0E,cAAc,EAAE;UACjCe,aAAa,EAAE;QACjB,CAAC,CAAC;QACF,MAAMC,EAAE,GAAG,MAAOnE,QAAQ,IAAK;UAC7B,MAAMD,WAAW,CAACC,QAAQ,CAAC;UAC3BN,SAAS,EAAE;QACb,CAAC;QACDqE,OAAO,CAACK,EAAE,CAAC,KAAK,EAAED,EAAE,CAAC;QACrBJ,OAAO,CAACK,EAAE,CAAC,QAAQ,EAAED,EAAE,CAAC;QACxBJ,OAAO,CAACK,EAAE,CAAC,QAAQ,EAAED,EAAE,CAAC;QACxBJ,OAAO,CAACK,EAAE,CAAC,QAAQ,EAAED,EAAE,CAAC;QACxBJ,OAAO,CAACK,EAAE,CAAC,WAAW,EAAED,EAAE,CAAC;QAC3BJ,OAAO,CAACK,EAAE,CAAC,OAAO,EAAED,EAAE,CAAC;MACzB;IACF,CAAC,CAAC;EACJ;EAEA9F,YAAYA,CAACD,QAAkB,EAAE;IAC/B,MAAMiG,cAAc,GAAG;MACrBC,OAAO,EAAElG,QAAQ,CAACkG,OAAO;MACzBC,cAAc,EAAE,KAAK;MACrBzB,KAAK,EAAE,MAAM;MACbd,SAAS,EAAE,EAAE;MACbwC,OAAO,EAAE,WAAW;MACpBlC,WAAW,EAAE,UAAU;MACvBmC,mBAAmB,EAAE;IACvB,CAAC;IACD,IAAI,CAACxG,OAAO,GAAG,IAAAyG,kBAAS,EAACL,cAAc,EAAE,IAAI,CAACpG,OAAO,CAAC;EACxD;AACF;AAAC0G,OAAA,CAAA5G,OAAA,GAAAC,sBAAA"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -30,8 +30,7 @@ export default class LcdRouterWebpackPlugin implements WebpackPluginInstance {
|
|
|
30
30
|
const routersGenerator = new RoutersGenerator(options, pathService);
|
|
31
31
|
|
|
32
32
|
function isDev(compiler) {
|
|
33
|
-
if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production')
|
|
34
|
-
return false;
|
|
33
|
+
if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production') return false;
|
|
35
34
|
return true;
|
|
36
35
|
}
|
|
37
36
|
|
|
@@ -47,25 +46,45 @@ export default class LcdRouterWebpackPlugin implements WebpackPluginInstance {
|
|
|
47
46
|
const absCurrentDir = path.dirname(absFilePath);
|
|
48
47
|
|
|
49
48
|
const chunkCode = [] as string[];
|
|
49
|
+
const meJSON = fileService.readJSONSync(absFilePath);
|
|
50
50
|
try {
|
|
51
51
|
const reducerPath = resolver.getReducerFile(absCurrentDir);
|
|
52
52
|
chunkCode.push(`export { default as reducer } from '${reducerPath}';`);
|
|
53
53
|
} catch (e) {
|
|
54
54
|
// feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers
|
|
55
|
+
if (meJSON.mobx) {
|
|
56
|
+
/**
|
|
57
|
+
* mobx 模式下, 需要垫一个被 mobx-adapter 包裹的 reducer 函数
|
|
58
|
+
* 如果存在reducer文件,是默认会被 babel-plugin-enhance-reducer 处理的
|
|
59
|
+
*
|
|
60
|
+
* import storeHoc from 'rrc-loader-helper/lib/mobx-adapter';
|
|
61
|
+
* export const reducer = storeHoc({
|
|
62
|
+
* state: {},
|
|
63
|
+
* }, 'report/other-table')
|
|
64
|
+
*
|
|
65
|
+
* 不太方便去垫一个 reducer 函数,reducer 的路径计算比较复杂, 所以直接报错
|
|
66
|
+
* 同时,从逻辑上讲,如果开启了 mobx,那么必须要有 reducer 文件
|
|
67
|
+
*/
|
|
68
|
+
throw Error('开启 mobx 后,reducer 文件必须存在');
|
|
69
|
+
}
|
|
55
70
|
chunkCode.push(`export function reducer(){ return {} }`);
|
|
56
71
|
}
|
|
57
72
|
|
|
58
73
|
const viewPath = resolver.getViewFile(absCurrentDir);
|
|
59
74
|
chunkCode.push(`export { default as view } from '${viewPath}';`);
|
|
60
75
|
|
|
61
|
-
const meJSON = fileService.readJSONSync(absFilePath);
|
|
62
76
|
if (meJSON.theme && !options.theme?.hash) {
|
|
63
77
|
throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);
|
|
64
78
|
}
|
|
65
79
|
|
|
66
80
|
if (!meJSON.mobx) {
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
try {
|
|
82
|
+
const sagaPath = resolver.getSagaFile(absCurrentDir);
|
|
83
|
+
chunkCode.push(`export { default as saga } from '${sagaPath}';`);
|
|
84
|
+
} catch (e) {
|
|
85
|
+
// feat: saga 也可以不存在, 方便结合reactive 和 ak,默认创建一个reducers
|
|
86
|
+
chunkCode.push(`export function saga*(){ return {} }`);
|
|
87
|
+
}
|
|
69
88
|
}
|
|
70
89
|
|
|
71
90
|
if (meJSON.errorComponent) {
|
|
@@ -91,12 +110,9 @@ export default class LcdRouterWebpackPlugin implements WebpackPluginInstance {
|
|
|
91
110
|
const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;
|
|
92
111
|
|
|
93
112
|
// 处理是否存在多store的场景
|
|
94
|
-
const hasChildStore =
|
|
95
|
-
globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;
|
|
113
|
+
const hasChildStore = globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;
|
|
96
114
|
if (hasChildStore && (meJSON.sync || isExternal)) {
|
|
97
|
-
throw Error(
|
|
98
|
-
`如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`,
|
|
99
|
-
);
|
|
115
|
+
throw Error(`如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`);
|
|
100
116
|
}
|
|
101
117
|
|
|
102
118
|
/** reducers.js */
|