View this in English
Auto Run Commands for NPM Projects 自动命令运行器
这款 VS Code 插件可以在您打开工作区时,自动在集成终端中运行预设的命令。它非常适合用于启动开发服务器、运行构建观察程序或执行任何其他重复性的设置任务。
✨ 特性
- 自动执行:在您打开项目时立即运行您的设置命令。
- 多工作区支持:完美支持 VS Code 多根工作区,每个文件夹可以有独立的配置。
- 灵活配置:可以为所有项目设置全局命令,也可以为每个工作区或文件夹定义特定的命令。
- 配置优先级:文件夹特定配置 > 工作区配置 > 全局配置,高优先级配置会覆盖低优先级。
- 多终端支持:每条命令都在其专用的集成终端中执行。
- 智能条件执行:可以设置条件,只在满足特定条件时(如特定文件存在或package.json中包含特定脚本)才执行命令。
- 动态监听:运行时添加新文件夹到工作区,会自动执行该文件夹的配置命令。
⚙️ 工作原理
本插件从 VS Code 的设置中读取配置,并采用分层策略:
- 文件夹级设置(最高优先级):在多根工作区中,每个文件夹可以在其
.vscode/settings.json 中定义独立的命令。
- 工作区设置:在工作区配置文件(
.code-workspace)中定义的命令。
- 全局用户设置(最低优先级):在全局
settings.json 文件中定义的默认命令。
- 无命令:如果在所有位置都找不到命令,则不执行任何操作。
配置优先级规则:
- 高优先级的配置会完全覆盖低优先级的配置(不会合并)
- 同一优先级内,
commands 和 commandsWithConditions 可以同时使用
- 在多根工作区中,每个文件夹独立处理,互不影响
重要提示:命令是并行执行的,每条命令都在自己的终端中运行。这对于启动独立的服务(如前端和后端服务器)非常理想,但不适用于相互依赖的命令(例如,需要先执行 npm install,再执行 npm run build)。
这种设计允许您为所有项目设置默认命令(例如 git pull),并根据具体项目的需求(例如 npm run dev)进行覆盖。
🚀 使用方法
设置工作区特定命令
这是最常见的用例。对于一个特定的项目,您希望运行像 npm install 和 npm run dev 这样的命令。
在您的项目中,创建或打开 .vscode/settings.json 文件。
将您的命令添加到 autoRunCommands.commands 数组中:
{
"autoRunCommands.commands": [
"cd client && npm run dev",
"cd server && npm run start"
]
}
下次您打开这个项目时,这些命令将自动运行。
设置全局默认命令
如果您有一些命令希望在每个项目(没有自定义工作区配置的项目)中都运行。
打开命令面板 (Ctrl+Shift+P 或 Cmd+Shift+P)。
搜索并选择 "首选项: 打开用户设置 (JSON)" (Preferences: Open User Settings (JSON))。
添加您的全局命令:
{
// ...您的其他全局设置
"autoRunCommands.commands": [
"git pull --rebase",
"echo '欢迎来到您的项目!'"
]
}
为特定工作区禁用命令
如果您设置了全局命令,但希望在某个特定的工作区中阻止任何命令运行,只需在该工作区的设置中定义一个空数组即可。
打开该项目的 .vscode/settings.json 文件。
添加以下配置:
{
"autoRunCommands.commands": []
}
这将覆盖全局设置,并导致不执行任何命令。
使用条件命令
为了避免在不适用的项目中运行某些命令(例如,在非前端项目中运行 npm run dev),您可以使用条件命令:
打开 .vscode/settings.json 文件(针对特定工作区)或全局设置。
使用 autoRunCommands.commandsWithConditions 配置:
{
"autoRunCommands.commandsWithConditions": [
{
"command": "npm run dev",
"condition": {
"packageScript": "dev"
}
},
{
"command": "pnpm build",
"condition": {
"fileExists": "pnpm-lock.yaml",
"packageScript": "build"
}
}
]
}
在上面的例子中:
- 第一条命令
npm run dev 只会在 package.json 中存在 "dev" 脚本时运行。
- 第二条命令
pnpm build 只会在同时满足这两个条件时运行:存在 pnpm-lock.yaml 文件,且 package.json 中有 "build" 脚本。
可用的条件类型:
fileExists: 检查指定文件是否存在(相对于工作区根目录)
packageScript: 检查 package.json 中是否存在指定的脚本
这确保了命令只在适用的项目中运行,避免了不必要的错误和混乱。
多工作区(Multi-root Workspace)配置
当您使用 VS Code 的多根工作区功能时,可以为每个文件夹设置不同的命令:
- 创建一个
.code-workspace 文件或使用 "将文件夹添加到工作区" 功能
- 在每个文件夹的
.vscode/settings.json 中配置独立的命令
示例场景:一个包含前端和后端的 monorepo 项目
my-project/
├── frontend/
│ └── .vscode/
│ └── settings.json → {"autoRunCommands.commands": ["pnpm dev"]}
└── backend/
└── .vscode/
└── settings.json → {"autoRunCommands.commands": ["npm start"]}
打开这个多根工作区时:
frontend 文件夹会自动运行 pnpm dev
backend 文件夹会自动运行 npm start
- 每个命令在独立的终端中执行,终端名称会包含文件夹名称以便区分
配置优先级说明:
- 文件夹级配置(
.vscode/settings.json)优先级最高
- 如果某个文件夹没有配置,会使用工作区级或全局配置
- 文件夹之间的配置互不影响,一个文件夹出错不会影响其他文件夹
享受更高效的工作流吧!