Umi开发插件补遗

        Umi插件开发目前找到有效地资料只有在官网上有限的一点内容,这个内容实际上是不完整的,本文将完善这部分内容,后面假设插件名为plugin-my。官方教程主要的问题在于resetMainPath函数的缺失,resetMainPath函数的类型很容易判断,如下:function (routes: any[], mainPath: string),这个函数的作用就是将routes中"/"对应的页面改为mainPath设置的页面。

        但问题在于routes的结构并不是很清晰,不知道如何对这个结构的内容进行调整。要实现这个函数,最有效的方式当然是能够先写出函数框架,然后断点进去后查看routes的格式后,再进行"/"默认页面的替换。

        那么,问题转化为,如何对插件中的这部分函数进行调试。首先,我做了这样的尝试:

        1、执行npm run build,得到lib/index.js,然后对index.js中resetMainPath设置了断点

        2、执行npm start,此时服务启动,跳转到浏览器

        3、执行Start Debugging,期望能在断点处停留

        但做完这些操作后,并没有得到预期的结果。原因在于umi对于插件的使用,实际上是在编译时执行,也就是plugin-my中的resetMainPath,实际是在编译时对内部的routes.ts进行修改。而Start Debugging设置为"type": "chrome",这种Debugging针对的是运行时的umi应用。下图为umi启动后的源码结构:

        那怎么办呢?办法就是要对启动应用过程进行调试,启动的应用实际是node应用,类似于执行node umi.js。接下来就变成怎么找到这个umi.js。这时需要理解npm start时,到底做了什么。npm start执行的是:cross-env APP_ROOT=example umi dev。cross-env设置的是环境变量,主程序是umi,参数为dev。umi是可执行文件,并不是node应用,通过查看文件内容,可以跟踪到实际的node应用在./node_modules/umi/bin/umi.js,所以现在就是要对这个文件进行调试设置。

       在VSCode中新增了一个调试配置:

    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "env": {"APP_ROOT":"example"},
      "program": "./node_modules/umi/bin/umi.js",
      "args": ["dev"]
    }

       通过执行这段调试,index.js的相关断点就可以进入了:

       然后就可以愉快的编写resetMainPath函数了。完整的代码在github

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值