feat: mock.js支持es6写法

This commit is contained in:
万纯 2021-03-15 20:20:32 +08:00
parent b076db692e
commit fd6429bbda
5 changed files with 47 additions and 12 deletions

View File

@ -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': '★'
}));

View File

@ -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**:子菜单配置。

View File

@ -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': '★'
}));

View File

@ -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!');
}

View File

@ -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: '文件上传成功'
});
});
};
}