WebStorm 配置 DevTools 报错路径快速跳转编辑器
调前端 bug 时最琐碎的一步是「从报错跳到代码」。Chrome DevTools 里看到一个报错,右边显示 Home.vue:42,然后我要切到 WebStorm、搜文件名、跳到 42 行。一天下来这个动作要重复几十次。
DevTools 里点一下文件名就直接在编辑器里打开对应行的功能是存在的,只是要配。原理是 DevTools 在 Sources 面板里提供了 open-in-editor 的能力,它通过一个约定的方式调用系统的编辑器命令——具体来说是读 EDITOR 环境变量(或者通过 DevTools 的 workspace 配置),拿到编辑器的命令行入口,把文件路径和行号作为参数传过去。
所以要配好三件事:环境变量指向编辑器、编辑器的命令行工具存在于 PATH、命令名和环境变量里写的一致。下面按这个顺序来。
1.首先在环境变量中配置如下
vi ~/.bash_profile
用 zsh 的话(macOS Catalina 之后默认就是 zsh)要改 ~/.zshrc 而不是 ~/.bash_profile,后者只在 bash 下加载。不确定当前用的是哪个 shell 就执行 echo $SHELL 看一眼。
添加如下配置
# Adds support for various open in editor features in tools
export EDITOR="webstorm"
if [[ "$__CFBundleIdentifier" == com.jetbrains.* ]]
then
# Removes "com.jetbrains." from the beginning of string
# Then removes "-EAP" from end of string if needed
export EDITOR="${${__CFBundleIdentifier#"com.jetbrains."}%"-EAP"}"
fi
拆开看这段做了什么。第一行把 EDITOR 设成 webstorm,这是默认值。
后面的 if 是个巧妙的处理:__CFBundleIdentifier 是 macOS 在启动应用时注入的环境变量,值是应用的 bundle id。如果终端是从某个 JetBrains IDE 内部打开的(IDE 自带的 Terminal 面板),这个变量的值就是 com.jetbrains.WebStorm 或 com.jetbrains.intellij 之类。那两行字符串操作把前缀 com.jetbrains. 和可能的 -EAP 后缀去掉,剩下的正好是对应 IDE 的命令名。
效果是「在哪个 IDE 里打开的终端,EDITOR 就指向那个 IDE」。同时装了 WebStorm 和 IntelliJ 的话不用改配置,自动匹配。
注意 ${${var#prefix}%suffix} 这种嵌套的参数展开是 zsh 专有语法,bash 不支持嵌套,在 .bash_profile 里会报语法错误。这段代码实际只能放在 .zshrc 里。
- 打开
jetBrains toolBox
上一步配的 EDITOR="webstorm" 是个命令名,得有对应的可执行文件才能被调用。Toolbox 可以自动生成这些命令行启动脚本。
- 点击设置-工具-开启生成
shell脚本 - 配置
shell脚本路径如下:/usr/local/bin
选 /usr/local/bin 是因为它默认在 PATH 里,不用额外配置。Apple Silicon 的机器上这个目录可能不在 PATH(Homebrew 改用 /opt/homebrew/bin),可以选 ~/.local/bin 然后自己加进 PATH,或者确认一下 echo $PATH 里有没有 /usr/local/bin。
下图是 Toolbox 的设置界面,开关和路径输入框都在这一页:

- 点击对应
ide编辑器的设置
全局开关打开之后,还要给每个 IDE 单独指定脚本名。在 Toolbox 里点具体某个 IDE 右边的齿轮进入它的设置页:

shell 脚本名称更改为 webstorm
这一步是整个配置的关键:脚本名必须和第一步 EDITOR 里写的值完全一致。Toolbox 默认生成的名字可能带版本号或者是别的形式,对不上的话 DevTools 调用时就报命令找不到。

改完之后开一个新的终端窗口(配置只在新 shell 里生效),执行 webstorm --version 验证。能输出版本信息说明命令可用了;报 command not found 就是路径没进 PATH 或者名字没对上。
再执行 echo $EDITOR 确认环境变量的值是 webstorm。两个都对上,DevTools 里点文件名就能跳到编辑器了。
还需要注意的
Source Map 必须是可用的。DevTools 里显示的文件名和行号来自 source map,如果构建时没生成 source map(生产构建默认关掉),点开看到的是打包后的压缩代码,跳过去也没意义。开发环境下 Vite 和 webpack 默认都开着,不用管;调线上问题时得单独确认。
Chrome 的 Workspace 是另一条路。DevTools 的 Sources 面板里可以把本地目录映射成 workspace(Filesystem → Add folder),映射之后不仅能跳转,还能直接在 DevTools 里改代码并保存到本地文件。比环境变量这套配起来简单,但改代码这个能力我很少用——在 IDE 里改更顺手。
Vue DevTools 有自己的实现。Vue 的 DevTools 扩展里点组件跳到源码走的是 vite-plugin-vue-inspector 之类的插件,配置方式完全不同(在 vite 配置里指定 launchEditor)。两套机制互不影响,可以都配上。

还没有留言,来发表第一条吧~