lcd-router-webpack-plugin 9.2.6 → 9.2.7-alpha.0
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 +1 -0
- package/lib/index.js.map +1 -1
- package/lib/utils/types.d.ts +4 -0
- package/lib/utils/types.d.ts.map +1 -1
- package/lib/utils/types.js.map +1 -1
- package/package.json +1 -1
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,KAAK,OAAO,EAAe,MAAM,SAAS,CAAC;AAO3E,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,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,KAAK,OAAO,EAAe,MAAM,SAAS,CAAC;AAO3E,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,qBAAqB;IAC1E,OAAO,EAAE,OAAO,CAAC;gBACL,OAAO,EAAE,OAAO;IAI5B,KAAK,CAAC,QAAQ,EAAE,QAAQ;IA4OxB,YAAY,CAAC,QAAQ,EAAE,QAAQ;CAYhC"}
|
package/lib/index.js
CHANGED
|
@@ -157,6 +157,7 @@ class LcdRouterWebpackPlugin {
|
|
|
157
157
|
fileService.writeThemeFile(options.theme.hash, 'toGlobalTheme');
|
|
158
158
|
}
|
|
159
159
|
const list = _globby.default.sync('**/me.json', {
|
|
160
|
+
ignore: options.ignore ?? [],
|
|
160
161
|
cwd: pathService.getPageRootAbs()
|
|
161
162
|
});
|
|
162
163
|
if (list.length === 0) {
|
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","isExternal","externals","some","x","chunkCode","meJSON","readJSONSync","reducerPath","getReducerFile","getReducerPath","push","e","mobx","Error","viewPath","getViewPath","theme","hash","sagaPath","getSagaFile","getSagaPath","errorComponent","getErrorComFile","themePath","getThemePath","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","meJSONRelativePath","getMeJSONRelativePath","writeMeJSONFile","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","environment","disableBabelLoaderRule","module","rules","exclude","use","loader","resolve","presets","babelrc","parserOpts","plugins","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, type Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport { Options };\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 // 处理 lcd 中的路由体系\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 const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n const chunkCode = [] as string[];\n const meJSON = fileService.readJSONSync(absFilePath);\n let reducerPath = '';\n try {\n resolver.getReducerFile(absCurrentDir);\n reducerPath = pathService.getReducerPath(filepath);\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 文件必须存在 ${absFilePath}`);\n }\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n if (!isExternal) {\n const viewPath = pathService.getViewPath(filepath);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n }\n\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n let sagaPath = '';\n if (!meJSON.mobx) {\n try {\n resolver.getSagaFile(absCurrentDir);\n sagaPath = pathService.getSagaPath(filepath);\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 resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${meJSON.errorComponent}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemePath(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.getThemePath(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n const meJSONRelativePath = pathService.getMeJSONRelativePath(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\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 reducerPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n reducerPath,\n sagaPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONRelativePath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(currentDir)) {\n const _key = currentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: currentDir,\n path: _key,\n exact: true,\n meJSONRelativePath,\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 // lcd 中包含一些语法转换处理\n compiler.hooks.environment.tap('lcd-preset', () => {\n if (this.options.disableBabelLoaderRule) return;\n compiler.options.module.rules.push({\n test: /\\.(js|ts)x?$/,\n exclude: /node_modules/,\n use: [\n {\n loader: require.resolve('babel-loader'),\n options: {\n presets: [[require.resolve('./babel/index'), this.options]],\n babelrc: false,\n // 需要支持语法解析, 但不需要做转换\n parserOpts: {\n plugins: [\n 'jsx',\n 'typescript',\n 'asyncDoExpressions',\n 'decimal',\n 'decorators-legacy',\n 'decoratorAutoAccessors',\n 'destructuringPrivate',\n 'doExpressions',\n 'exportDefaultFrom',\n 'functionBind',\n 'functionSent',\n 'importAssertions',\n 'moduleBlocks',\n 'partialApplication',\n 'throwExpressions',\n ],\n },\n },\n },\n ],\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: 'reducer',\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","isExternal","externals","some","x","chunkCode","meJSON","readJSONSync","reducerPath","getReducerFile","getReducerPath","push","e","mobx","Error","viewPath","getViewPath","theme","hash","sagaPath","getSagaFile","getSagaPath","errorComponent","getErrorComFile","themePath","getThemePath","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","meJSONRelativePath","getMeJSONRelativePath","writeMeJSONFile","hasChildStore","globby","sync","reducerName","cwd","length","set","namespace","page","exact","RegExp","index","test","_key","replace","list","ignore","getPageRootAbs","console","warn","sortedList","map","sort","a","b","startsWith","localeCompare","dir","forEach","watcher","chokidar","watch","ignoreInitial","fn","on","environment","disableBabelLoaderRule","module","rules","exclude","use","loader","resolve","presets","babelrc","parserOpts","plugins","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, type Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport { Options };\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 // 处理 lcd 中的路由体系\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 const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n const chunkCode = [] as string[];\n const meJSON = fileService.readJSONSync(absFilePath);\n let reducerPath = '';\n try {\n resolver.getReducerFile(absCurrentDir);\n reducerPath = pathService.getReducerPath(filepath);\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 文件必须存在 ${absFilePath}`);\n }\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n if (!isExternal) {\n const viewPath = pathService.getViewPath(filepath);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n }\n\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n let sagaPath = '';\n if (!meJSON.mobx) {\n try {\n resolver.getSagaFile(absCurrentDir);\n sagaPath = pathService.getSagaPath(filepath);\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 resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${meJSON.errorComponent}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemePath(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.getThemePath(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n const meJSONRelativePath = pathService.getMeJSONRelativePath(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\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 reducerPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n reducerPath,\n sagaPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONRelativePath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(currentDir)) {\n const _key = currentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: currentDir,\n path: _key,\n exact: true,\n meJSONRelativePath,\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 ignore: options.ignore ?? [],\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 // lcd 中包含一些语法转换处理\n compiler.hooks.environment.tap('lcd-preset', () => {\n if (this.options.disableBabelLoaderRule) return;\n compiler.options.module.rules.push({\n test: /\\.(js|ts)x?$/,\n exclude: /node_modules/,\n use: [\n {\n loader: require.resolve('babel-loader'),\n options: {\n presets: [[require.resolve('./babel/index'), this.options]],\n babelrc: false,\n // 需要支持语法解析, 但不需要做转换\n parserOpts: {\n plugins: [\n 'jsx',\n 'typescript',\n 'asyncDoExpressions',\n 'decimal',\n 'decorators-legacy',\n 'decoratorAutoAccessors',\n 'destructuringPrivate',\n 'doExpressions',\n 'exportDefaultFrom',\n 'functionBind',\n 'functionSent',\n 'importAssertions',\n 'moduleBlocks',\n 'partialApplication',\n 'throwExpressions',\n ],\n },\n },\n },\n ],\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: 'reducer',\n disableBuiltInRoute: false,\n };\n this.options = deepmerge(defaultOptions, this.options);\n }\n}\n"],"mappings":"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"}
|
package/lib/utils/types.d.ts
CHANGED
|
@@ -70,6 +70,10 @@ export interface Options {
|
|
|
70
70
|
* 是否保留 params 和 query 作为 reducer 的 key,通常用于同一个路由同时打开的场景,例如 keep-alive,谨慎使用
|
|
71
71
|
*/
|
|
72
72
|
retain?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* 排除掉某些文件不生成路由,规则请参考 fast-glob ignore https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#ignore
|
|
75
|
+
*/
|
|
76
|
+
ignore?: string[];
|
|
73
77
|
}
|
|
74
78
|
export interface MeJSON {
|
|
75
79
|
theme?: string;
|
package/lib/utils/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
package/lib/utils/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../types.ts"],"sourcesContent":["export interface Options {\n /**\n * 组件上下文, 默认取 compiler.context\n * @default compiler.context\n */\n context?: string;\n /**\n * 是否禁用内置路由\n * 默认会将 react-router-dom 转换到 rrc-loader-helper/router\n * 如果你是新项目,建议将该配置配置为true,因为内置路由针对react-router做了大量的改动,可能会引起一些无法预测的故障\n * @default false\n */\n disableBuiltInRoute?: boolean;\n /**\n * 是否开启 webpack prefetch预加载\n * @default false\n */\n enablePreFetch?: boolean;\n /**\n * 指定页面路径 不进行注册路由\n * @default []\n */\n externals?: string[];\n /**\n * 页面目录\n * @default component\n */\n pageDir?: string;\n /**\n * shineout 主题\n */\n theme?: {\n hash: string;\n };\n /**\n * reducer 文件名称\n * @default reducer\n */\n reducerName?: string;\n /**\n * loading 组件路径\n */\n loading?: string;\n /**\n * 一个神奇的属性,用于处理 /xxx/order/list 这种路由过长的问题\n * 也可以用来作为父路由的默认路由目录\n * 会生成一个新路由 /xxx/order,实际目录指向为 /xxx/order/list\n * @default list\n */\n index?: string;\n /**\n * 渲染出错时的组件地址\n */\n errorComponent?: string;\n\n /**\n * 是否允许页面内生成自定义路由\n * 例如在 component/order/detail/me.json 中 配置 route: '/:id',此时会生成动态路由 /order/detail/:id\n * 非常不推荐使用的一个属性,因为此功能受 me.json 中 exact 属性影响, 仅当 exact: true 时候,才不会拼接路由\n * 当开启 dangerousRoute 后, 不再受 exact 影响, 都会生成 拼接路由 /order/detail/:id\n * @default false\n */\n dangerousRoute?: boolean;\n\n /**\n * 是否禁用 babel-loader 处理, 默认开启,因为需要 babel-loader 会对 reducer 进行处理\n * 但考虑到新增 rule 会导致打包速度变慢,所以提供了这个配置。\n * @default false\n */\n disableBabelLoaderRule?: boolean;\n\n /**\n * 是否保留 params 和 query 作为 reducer 的 key,通常用于同一个路由同时打开的场景,例如 keep-alive,谨慎使用\n */\n retain?: boolean;\n}\n\nexport interface MeJSON {\n theme?: string;\n sync?: boolean;\n /**\n * mobx 模式\n * 未开启时, reducer 文件导出为纯函数,用来处理状态修改。 saga 文件用来处理副作用逻辑。\n * 开启后,reducer 文件导出为对象,包含 state 以及方法, 普通函数作为reducer修改状态, generator 函数处理副作用逻辑。\n * @default false\n */\n mobx?: boolean;\n keepAlive?: boolean;\n\n /**\n * 是否保留 params 和 query 作为 reducer 的 key,通常用于同一个路由同时打开的场景,例如 keep-alive,谨慎使用\n */\n retain?: boolean;\n\n title?: string;\n /**\n * @description 为了兼容同一个页面多次打开 动态拓展 redux 的reducer 节点\n * @description 在路由配置中添加 /:id?,不推荐使用, 仅极少场景需要\n * @default false\n */\n linkExtendable?: boolean;\n injectStore?: boolean | string;\n route?: string;\n /**\n * 默认是以 url 作为page的key, 但是有些场景下,会在 url 中动态添加 query,导致页面进行重绘\n * 当然,这个配置开启后,究竟会引发什么问题,我不清楚,但是我知道,这个配置是有风险的,所以我给了一个 UNSAFE 的前缀\n */\n UNSAFE_pathAsKey?: boolean;\n\n enablePreFetch?: boolean;\n\n /**\n * 自定义 webpackChunkName,对于指定页面的预加载可能有效\n */\n webpackChunkName?: string;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../types.ts"],"sourcesContent":["export interface Options {\n /**\n * 组件上下文, 默认取 compiler.context\n * @default compiler.context\n */\n context?: string;\n /**\n * 是否禁用内置路由\n * 默认会将 react-router-dom 转换到 rrc-loader-helper/router\n * 如果你是新项目,建议将该配置配置为true,因为内置路由针对react-router做了大量的改动,可能会引起一些无法预测的故障\n * @default false\n */\n disableBuiltInRoute?: boolean;\n /**\n * 是否开启 webpack prefetch预加载\n * @default false\n */\n enablePreFetch?: boolean;\n /**\n * 指定页面路径 不进行注册路由\n * @default []\n */\n externals?: string[];\n /**\n * 页面目录\n * @default component\n */\n pageDir?: string;\n /**\n * shineout 主题\n */\n theme?: {\n hash: string;\n };\n /**\n * reducer 文件名称\n * @default reducer\n */\n reducerName?: string;\n /**\n * loading 组件路径\n */\n loading?: string;\n /**\n * 一个神奇的属性,用于处理 /xxx/order/list 这种路由过长的问题\n * 也可以用来作为父路由的默认路由目录\n * 会生成一个新路由 /xxx/order,实际目录指向为 /xxx/order/list\n * @default list\n */\n index?: string;\n /**\n * 渲染出错时的组件地址\n */\n errorComponent?: string;\n\n /**\n * 是否允许页面内生成自定义路由\n * 例如在 component/order/detail/me.json 中 配置 route: '/:id',此时会生成动态路由 /order/detail/:id\n * 非常不推荐使用的一个属性,因为此功能受 me.json 中 exact 属性影响, 仅当 exact: true 时候,才不会拼接路由\n * 当开启 dangerousRoute 后, 不再受 exact 影响, 都会生成 拼接路由 /order/detail/:id\n * @default false\n */\n dangerousRoute?: boolean;\n\n /**\n * 是否禁用 babel-loader 处理, 默认开启,因为需要 babel-loader 会对 reducer 进行处理\n * 但考虑到新增 rule 会导致打包速度变慢,所以提供了这个配置。\n * @default false\n */\n disableBabelLoaderRule?: boolean;\n\n /**\n * 是否保留 params 和 query 作为 reducer 的 key,通常用于同一个路由同时打开的场景,例如 keep-alive,谨慎使用\n */\n retain?: boolean;\n\n /**\n * 排除掉某些文件不生成路由,规则请参考 fast-glob ignore https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#ignore\n */\n ignore?: string[];\n}\n\nexport interface MeJSON {\n theme?: string;\n sync?: boolean;\n /**\n * mobx 模式\n * 未开启时, reducer 文件导出为纯函数,用来处理状态修改。 saga 文件用来处理副作用逻辑。\n * 开启后,reducer 文件导出为对象,包含 state 以及方法, 普通函数作为reducer修改状态, generator 函数处理副作用逻辑。\n * @default false\n */\n mobx?: boolean;\n keepAlive?: boolean;\n\n /**\n * 是否保留 params 和 query 作为 reducer 的 key,通常用于同一个路由同时打开的场景,例如 keep-alive,谨慎使用\n */\n retain?: boolean;\n\n title?: string;\n /**\n * @description 为了兼容同一个页面多次打开 动态拓展 redux 的reducer 节点\n * @description 在路由配置中添加 /:id?,不推荐使用, 仅极少场景需要\n * @default false\n */\n linkExtendable?: boolean;\n injectStore?: boolean | string;\n route?: string;\n /**\n * 默认是以 url 作为page的key, 但是有些场景下,会在 url 中动态添加 query,导致页面进行重绘\n * 当然,这个配置开启后,究竟会引发什么问题,我不清楚,但是我知道,这个配置是有风险的,所以我给了一个 UNSAFE 的前缀\n */\n UNSAFE_pathAsKey?: boolean;\n\n enablePreFetch?: boolean;\n\n /**\n * 自定义 webpackChunkName,对于指定页面的预加载可能有效\n */\n webpackChunkName?: string;\n}\n"],"mappings":""}
|