◆

WebStorm 配置 DevTools 报错路径快速跳转编辑器

2023-02-02 01:370

调前端 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 里。

  1. 打开 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 的设置界面,开关和路径输入框都在这一页:

JetBrains Toolbox 设置页面中生成 shell 脚本的开关及脚本存放路径配置
  1. 点击对应 ide 编辑器的设置

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

JetBrains Toolbox 中单个 IDE 的设置入口

shell 脚本名称更改为 webstorm

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

Toolbox 中 IDE 设置页的 Shell script name 输入框,填写为 webstorm

改完之后开一个新的终端窗口(配置只在新 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)。两套机制互不影响,可以都配上。

💬留言板0

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

PAGE LOAD / LIVEWebStorm 配置 DevTools 报错路径快速跳转编辑器加载中