You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在package.json变更时自动运行yarn audit再执行npm脚本

实现方案

有可落地的技术方案,核心通过npm生命周期钩子+package.json文件哈希校验实现,以下是两种常用实现方式:

方案1:原生npm钩子实现(无额外全局依赖)

通过npm内置的pre脚本钩子逻辑,搭配自定义校验脚本实现,适合大部分中小型项目:

  • 步骤1:在项目根目录新建校验脚本 .audit-check.js,代码如下:
const fs = require('fs')
const crypto = require('crypto')
const { execSync } = require('child_process')

// 可自定义配置
const CONFIG = {
  packagePath: './package.json',
  hashRecordPath: './.package-hash',
  skipEnvKey: 'SKIP_AUDIT'
}

// 支持手动跳过校验
if (process.env[CONFIG.skipEnvKey]) process.exit(0)

// 计算当前package.json哈希值
const currentContent = fs.readFileSync(CONFIG.packagePath)
const currentHash = crypto.createHash('md5').update(currentContent).digest('hex')

// 读取上一次记录的哈希值
let lastHash = ''
if (fs.existsSync(CONFIG.hashRecordPath)) {
  lastHash = fs.readFileSync(CONFIG.hashRecordPath, 'utf8').trim()
}

// 哈希不一致时执行yarn audit
if (currentHash !== lastHash) {
  console.log('检测到package.json已变更,自动执行yarn audit校验依赖风险...')
  try {
    execSync('yarn audit', { stdio: 'inherit' })
    // 校验通过更新哈希记录
    fs.writeFileSync(CONFIG.hashRecordPath, currentHash)
  } catch (err) {
    console.error('yarn audit 检测到存在高危依赖风险,请修复后再执行脚本')
    process.exit(1)
  }
}
  • 步骤2:在package.json的scripts字段中,为需要触发校验的脚本添加对应前置钩子,统一指向校验脚本:
{
  "scripts": {
    "prestart": "node .audit-check.js",
    "prebuild": "node .audit-check.js",
    "pretest": "node .audit-check.js",
    "preinstall": "node .audit-check.js",
    // 其余业务脚本保持不变
    "start": "vite",
    "build": "vite build",
    "test": "vitest run"
  }
}
  • 步骤3:将哈希记录文件.package-hash添加到.gitignore,避免提交到远程仓库。

方案2:自动覆盖所有脚本(适合脚本较多的大型项目)

如果项目自定义脚本数量多,逐个添加pre钩子效率低,可以通过轻量工具实现全脚本自动触发:

  • 步骤1:安装开发依赖:npm install script-guard --save-dev
  • 步骤2:在package.json中添加全局脚本执行规则,无需修改原有脚本配置:
{
  "script-guard": {
    "beforeAll": "node .audit-check.js"
  }
}

配置完成后,所有npm、yarn脚本执行前都会自动触发校验逻辑。

可选优化配置

如需调整拦截规则,可以修改.audit-check.js的参数:

  • 不需要强制拦截audit不通过的场景,删除process.exit(1)逻辑即可,仅输出检测结果不阻断脚本运行
  • 可以自定义yarn audit的参数,比如仅检测高危风险改为yarn audit --level high

内容的提问来源于stack exchange,提问作者yasiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:27:03