最近在umi. 设置一个layout字段, 结果左边菜单栏就出现了。 很神奇。 决定对这个库一探究竟。
我是一个喜欢看底层库的人,网上所有的启动方式都是yarn或者npm start 启动服务。然后在浏览器运行调试的。 这个调试的是前端。
我想调试的是后端。 通过跟踪,发现其实
yarn start 调用的是 umi dev
umi 是一个软连接到umi.js的文件
#!/usr/bin/env node const resolveCwd = require('resolve-cwd'); const { name, bin } = require('../package.json'); const localCLI = resolveCwd.silent(`${name}/${bin['umi']}`); const b = !process.env.USE_GLOBAL_UMI && localCLI && localCLI !== __filename; if (b) { const debug = require('@umijs/utils').createDebug('umi:cli'); debug('Using local install of umi'); console.log(`localCLI:${localCLI}`); require(localCLI); } else { require('../lib/cli'); }
也就是其实执行的umi/lib/cli.js文件, 关键部分代码
_asyncToGenerator(function* () { try { switch (args._[0]) { case 'dev': const child = (0, _fork.default)({ scriptPath: require.resolve('./forkedDev') }); // ref: // http://nodejs.cn/api/process/signal_events.html process.on('SIGINT', () => { child.kill('SIGINT'); }); process.on('SIGTERM', () => { child.kill('SIGTERM'); }); break;
也就是fork的forkedDev文件
于是就有了vscode的调试配置文件。launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "program": "${workspaceFolder}/node_modules/umi/lib/forkedDev.js", "args": [ "dev" ], "cwd": "${workspaceFolder}", "outFiles": [ "${workspaceFolder}/**/*.js" ] } ] }
可以调试umi服务端了。