vite构建失败时通过node.js脚本捕获异常并调用钉钉等api发送告警,需在ci环境启用、敏感信息从环境变量读取。

在 Vite 构建失败时触发告警通知,核心思路是**拦截构建过程的错误、捕获异常,并通过脚本调用外部服务(如邮件、钉钉、企业微信、飞书等)发送通知**。Vite 本身不内置告警机制,需结合构建脚本、Node.js 错误处理和第三方通知 API 实现。
监听 vite build 命令的退出状态
Vite CLI 在构建失败时会以非零状态码(如 1)退出。可在 shell 脚本中判断执行结果,失败后触发通知逻辑:
- Linux/macOS(package.json scripts 示例):
"scripts": {
"build": "vite build || npm run notify:fail"
}
- Windows 需用
cross-env或 PowerShell 脚本适配,推荐统一用 Node.js 脚本控制流程,更可靠。
用自定义 Node.js 脚本封装构建并捕获错误
创建 scripts/build.js,调用 Vite 的 Node API,显式捕获构建异常:
import { build } from 'vite';
async function run() {
try {
await build({
// 可传入 vite.config.js 路径或配置对象
configFile: './vite.config.js',
mode: 'production'
});
console.log('✅ 构建成功');
} catch (err) {
console.error('❌ 构建失败:', err.message);
await sendAlert(`构建失败:${err.message?.slice(0, 200) || '未知错误'}`);
}
}
run();
再在 package.json 中替换构建命令:
"scripts": {
"build": "node scripts/build.js"
}
实现 sendAlert —— 发送钉钉/企业微信/邮件等通知
以钉钉机器人(Webhook)为例(需先在钉钉群中添加自定义机器人并获取 Webhook URL):
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const https = require('https');
async function sendAlert(text) {
const message = {
msgtype: 'text',
text: { content: `[Vite 构建告警] ${new Date().toLocaleString()} \n${text}` }
};
return new Promise((resolve, reject) => {
const req = https.request(
{
method: 'POST',
hostname: 'oapi.dingtalk.com',
path: '/robot/send?access_token=YOUR_WEBHOOK_TOKEN',
headers: { 'Content-Type': 'application/json' }
},
(res) => res.statusCode === 200 ? resolve() : reject(new Error(`HTTP ${res.statusCode}`))
);
req.on('error', reject);
req.write(JSON.stringify(message));
req.end();
});
}
- 企业微信、飞书类似,只需更换请求地址、请求体格式和认证方式(如飞书用
Authorization: Bearer token) - 发邮件可用
nodemailer,适合内部系统;但注意 SMTP 配置和安全限制 - 敏感 Token 建议从环境变量读取(如
process.env.DINGTALK_WEBHOOK),勿硬编码
补充建议:区分环境与通知级别
避免开发机本地构建失败也发告警:
- 只在 CI 环境(如 GitHub Actions、GitLab CI)中启用通知:检查
process.env.CI === 'true' - 对不同分支设置策略:仅
main/prod分支构建失败才告警 - 添加简要上下文:附上 Git 分支、提交哈希、触发构建的 PR/Commit 链接(CI 中易获取)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











