umi icon indicating copy to clipboard operation
umi copied to clipboard

[Bug] umi4 4.0.10 mock 更改,热更新相关问题

Open liangskyli opened this issue 2 years ago • 1 comments

What happens?

因windows mock热更新不可用,这个是mac和windows下热更新问题

mac下

  • mock/custom-data/** 这里的文件不是mock入口,工具方法
    • umi3要排除,排出后,umi3热更新没问题
    • umi4排除了,改这里的文件(mock/custom-data/**),不热更新 (入口mock/users.ts引用了这里)
    • umi4不排除时,文件会热更新,但是改mock/custom-data/template-data.ts文件内容,需要改2次,才有第一次更改的数据

Mini Showcase Repository(REQUIRED)

Please provide a minimal reproduction then upload to your GitHub. 请提供 最小重现,并上传到你的 GitHub 仓库 复现仓库(注意:mac-mock-bug分支,主分支是windows 的bug):https://github.com/liangskyli/umi4-bug/tree/mac-mock-bug

相关代码说明:

.umirc.ts 文件
mock: {
        // umi3要排除,这不是mock入口,umi4排除了,改这里的文件,不热更新,umi3没问题
        // umi4注释后,mock/custom-data/template-data.ts 文件更改,需要改2次,才有第一次更改的数据,延迟了一次
        //exclude: ['mock/custom-data/**'],
    }

mock/custom-data/template-data.ts 文件
response: {
      data: {
        id: 2,
        // umi4注释exclude: ['mock/custom-data/**']后,
        // 更改name的值,需要改2次,才有第一次更改的数据,延迟了一次
        name: 'name2',
      },
    },

mock/users.ts 文件
export default {
  // 返回值也可以是对象形式
  'GET /api.php': (req: any, res: any) => {
    const json = getMockData(
        {data:{ id: 1, name: 'name1', c:'c', d:'d' }},
        req,
        // 这里umi4不能使用/api.php key,会标识重复mock路由,umi3使用exclude: ['mock/custom-data/**']后没问题
        // CustomData['/api.php'],
        CustomData['TemplateData/api.php'],
    );
    res.json(json);
  },
}

How To Reproduce

Steps to reproduce the behavior: 1. 2.

Expected behavior 1. 2.

复现步骤见复现仓库readme.md 和代码注释说明

Context

  • Umi Version:4.0.10
  • Node Version:v14.19.3
  • Platform:macOS 12.5

liangskyli avatar Aug 06 '22 03:08 liangskyli

umi3 mock ,只要主入口文件加入mock监听,工具文件排除,更新工具文件,会成功热更新,umi4就有问题,应该逻辑和umi3的不一致导致的

liangskyli avatar Aug 06 '22 03:08 liangskyli