scratch文件是脱离项目但具备完整语言功能的临时源码文件,需明确选择typescript/javascript等语言类型,支持调试、补全和语法检查;scratch缓冲区仅为纯文本便签,无智能提示。

WebStorm 的 Scratch File 不是“能跑就行”的记事本,它本质是脱离项目上下文、但保留完整语言能力的临时源码文件——写错语言类型或忽略执行前提,console.log() 都可能不输出、import 直接报红。
创建时选错语言,补全和语法检查就全失效
新建 Scratch File 必须从弹出的语言列表里明确选 TypeScript 或 JavaScript,不能靠改文件名(如把 scratch.txt 改成 test.ts)来“蒙混过关”。右下角状态栏显示的是当前锁定的语言模式,一旦选成 Plain Text,后续手动改后缀也不会触发 TS/JS 解析器。
- 选
TypeScript后,自动启用// @ts-check检查(若 Settings 中启用了 TypeScript Service) - 选
JavaScript但项目根目录没有package.json,require('lodash')会标红,且无法跳转定义 - HTML 类型的 Scratch 文件双击可预览,但 JS 断点无效;要调试必须配
JavaScript Debug运行配置
想用 npm 包?得先让 WebStorm “看见”它们
Scratch File 不读取项目外的 node_modules,也不触发 npm install。哪怕你本地全局装了 lodash,import _ from 'lodash' 依然会提示 Cannot resolve symbol '_'。
- 必须在当前打开的项目根目录下存在有效的
package.json,且已执行过npm install或yarn install - 第三方包需通过
import或require显式引入,不能靠全局变量(如window._)绕过模块系统 - ESM 语法(
import)在 Node 环境下运行需确保package.json有"type": "module",否则会报ERR_REQUIRE_ESM
点绿色三角没反应?两个硬性条件缺一不可
WebStorm 对 Scratch File 的“运行”不是直连 Node.js,而是调用项目配置的 Node 解释器执行该文件路径——这意味着它既依赖保存动作,也依赖顶层可执行语句。
- 文件必须至少保存过一次(
Ctrl+S),未保存的 scratch 不会生成实际磁盘路径,运行按钮灰色不可点 - 内容不能只有
function foo() {}或const x = 1;这类声明语句,必须有顶层调用,比如console.log(x);或foo(); - 如果用了
import,但当前 Node 版本不支持 ESM,会报Unexpected token 'export'—— 此时换用require或升级 Node 更直接
别把 Scratch File 当 Buffer,也别当项目文件用
Scratch File 和 Scratch Buffer 是两类东西:前者支持括号匹配、参数提示、断点调试;后者只是带基础高亮的纯文本便签,连 Ctrl+Click 跳转都没有。而它和项目文件的关键隔离在于路径与加载机制。
- 所有
Scratch File存在 IDE 配置目录(如~/Library/Caches/JetBrains/WebStorm2023.3/scratches/),不在项目内,git status看不见,eslint --ext .js,.ts也扫不到 - 不能被
import或require引入到项目真实文件中,PHP 的include同理——PHP 解释器根本找不到那个路径 - 适合场景很具体:试正则、验 fetch 返回结构、测某个 Array 方法链行为、快速 mock 一个接口响应体











