From fd6429bbdab82efe2238bc925c4b3b46035cb98e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=87=E7=BA=AF?= Date: Mon, 15 Mar 2021 20:20:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20mock.js=E6=94=AF=E6=8C=81es6?= =?UTF-8?q?=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide/mock.md | 4 +-- docs/reference/plugin/plugins/layout.md | 18 ++++++++++-- docs/zh/guide/mock.md | 4 +-- .../src/plugins/features/mock.js | 29 ++++++++++++++++--- packages/fes-template/mock.js | 4 +-- 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/docs/guide/mock.md b/docs/guide/mock.md index 789e3d33..eba27049 100644 --- a/docs/guide/mock.md +++ b/docs/guide/mock.md @@ -19,7 +19,7 @@ Fes.js 约定 `src/mock.js` 为 mock 文件。 可以参考如下 🌰: ``` js -module.exports = function ({ cgiMock, mockjs, utils }) { +export default function ({ cgiMock, mockjs, utils }) { const { Random } = mockjs; // 测试 proxy 与 mock 用例集合 @@ -160,7 +160,7 @@ module.exports = function ({ cgiMock, mockjs, utils }) { 比如: ```js -module.exports = function ({ cgiMock, mockjs, utils }) { +export default function ({ cgiMock, mockjs, utils }) { cgiMock('/random', mockjs.mock({ 'string|1-10': '★' })); diff --git a/docs/reference/plugin/plugins/layout.md b/docs/reference/plugin/plugins/layout.md index e0511b54..85bd8885 100644 --- a/docs/reference/plugin/plugins/layout.md +++ b/docs/reference/plugin/plugins/layout.md @@ -9,6 +9,8 @@ - 搭配 [@fesjs/plugin-access](./access.html) 插件使用,可以完成对路由的权限控制。 - 搭配 [@fesjs/plugin-locale](./locale.html) 插件使用,提供切换语言的能力。 - 支持自定义头部区域。 +- 菜单支持配置icon +- 菜单标题支持国际化 - 可配置页面是否需要 layout。 @@ -156,9 +158,21 @@ export default { - **path**:菜单的路径,可配置第三方地址。 - - **title**:菜单的标题。 + - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且在 `locales` 中配置了 `title` ,则菜单的名称会根据语言自动切换。 - - **icon**: 菜单的图标,只有一级标题展示图标,图标使用[antv icon](https://www.antdv.com/components/icon-cn/),在这里使用组件type。 + - **icon**: 菜单的图标,只有一级标题展示图标。 + - 图标使用[antv icon](https://www.antdv.com/components/icon-cn/),在这里使用组件type。 +```js +{ + name: "user" +} +``` + - 图表使用本地或者远程svg图片。 +```js +{ + name: "/wine-outline.svg" +} +``` - **children**:子菜单配置。 diff --git a/docs/zh/guide/mock.md b/docs/zh/guide/mock.md index 789e3d33..eba27049 100644 --- a/docs/zh/guide/mock.md +++ b/docs/zh/guide/mock.md @@ -19,7 +19,7 @@ Fes.js 约定 `src/mock.js` 为 mock 文件。 可以参考如下 🌰: ``` js -module.exports = function ({ cgiMock, mockjs, utils }) { +export default function ({ cgiMock, mockjs, utils }) { const { Random } = mockjs; // 测试 proxy 与 mock 用例集合 @@ -160,7 +160,7 @@ module.exports = function ({ cgiMock, mockjs, utils }) { 比如: ```js -module.exports = function ({ cgiMock, mockjs, utils }) { +export default function ({ cgiMock, mockjs, utils }) { cgiMock('/random', mockjs.mock({ 'string|1-10': '★' })); diff --git a/packages/fes-preset-built-in/src/plugins/features/mock.js b/packages/fes-preset-built-in/src/plugins/features/mock.js index 77956ebb..ae787683 100644 --- a/packages/fes-preset-built-in/src/plugins/features/mock.js +++ b/packages/fes-preset-built-in/src/plugins/features/mock.js @@ -1,6 +1,6 @@ import { existsSync, readFileSync } from 'fs'; import { resolve } from 'path'; -import { chokidar, lodash } from '@umijs/utils'; +import { chokidar, lodash, parseRequireDeps } from '@umijs/utils'; import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import mockjs from 'mockjs'; @@ -11,6 +11,24 @@ export default (api) => { let mockFile = ''; // mock 文件 let loadMock = ''; // mock 对象 + const registerBabel = (paths) => { + // support + // clear require cache and set babel register + const requireDeps = paths.reduce((memo, file) => { + memo = memo.concat(parseRequireDeps(file)); + return memo; + }, []); + requireDeps.forEach((f) => { + if (require.cache[f]) { + delete require.cache[f]; + } + }); + api.babelRegister.setOnlyMap({ + key: 'mock', + value: [...paths, ...requireDeps] + }); + }; + api.describe({ key: 'mock', config: { @@ -96,11 +114,14 @@ export default (api) => { } // require最新的 mock.js 文件 try { - const projectMock = require(mockFile); - if (!lodash.isFunction(projectMock)) { + // register babel + registerBabel([mockFile]); + const _initFunction = require(mockFile); + const initFunction = _initFunction.default || _initFunction; + if (!lodash.isFunction(initFunction)) { api.logger.info('mock.js should export Function'); return; } - projectMock({ cgiMock, mockjs, utils }); + initFunction({ cgiMock, mockjs, utils }); } catch (err) { api.logger.error('mock.js run fail!'); } diff --git a/packages/fes-template/mock.js b/packages/fes-template/mock.js index b7bf8500..df5a9d88 100644 --- a/packages/fes-template/mock.js +++ b/packages/fes-template/mock.js @@ -1,4 +1,4 @@ -module.exports = function ({ cgiMock, mockjs, utils }) { +export default function ({ cgiMock, mockjs, utils }) { const { Random } = mockjs; // 测试 proxy 与 mock 用例集合 @@ -127,4 +127,4 @@ module.exports = function ({ cgiMock, mockjs, utils }) { msg: '文件上传成功' }); }); -}; +}