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

如何在运行所有NPM script之前自动执行指定前置脚本

可行的优雅实现方案

方案1:使用npm原生全局前置钩子(最推荐)

npm原生提供了全脚本生命周期钩子prerun,会在任何npm run触发的脚本执行前自动运行,不需要手动修改每个业务脚本,也不需要自定义封装shell命令,团队成员不需要改变任何原有npm run <脚本名>的使用习惯,无额外学习成本。
配置方式如下:

{
  "scripts": {
    "prerun": "./setup_environment.sh",
    "script_one": "do something",
    "script_two": "do somethingelse"
  }
}

如果需要跳过部分不需要执行前置校验的脚本,可以在setup_environment.sh中利用npm自动注入的npm_lifecycle_event环境变量(存储当前触发的目标脚本名)做判断:

#!/bin/bash
# 配置不需要执行前置校验的脚本名单
SKIP_SCRIPTS=("setup_environment" "lint" "test")

if [[ " ${SKIP_SCRIPTS[@]} " =~ " ${npm_lifecycle_event} " ]]; then
    exit 0
fi

# 后续环境校验逻辑

该方案兼容npm v6+、pnpm、Yarn v1版本,高版本Yarn可通过开启npmScriptsEnabled配置支持该特性。

方案2:使用轻量脚本管理工具辅助

如果需要兼容更多包管理器版本,可以使用npm-run-all工具简化配置,不需要每个脚本手动拼接前置逻辑:

  1. 先安装依赖:npm i npm-run-all -D
  2. package.json配置如下:
{
  "scripts": {
    "setup": "./setup_environment.sh",
    "script_one": "do something",
    "script_two": "do somethingelse",
    "run": "run-s setup $npm_config_script"
  }
}

使用时执行npm run run --script=script_one即可自动先跑前置脚本再执行目标脚本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:01