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

如何在NodeJS项目的NPM dev脚本执行前运行指定JS文件?

如何在执行npm run dev时先运行./src/starter.js

方案一:修改watch:dev脚本(命令行层面控制)

你的npm run dev最终会触发nodemon,而nodemon的exec配置是并行运行watch:dev和watch:css。要实现启动主应用前先执行starter.js,只需修改package.json里的watch:dev脚本,让它按顺序执行初始化和主应用:

"watch:dev": "cross-env NODE_ENV=development babel-node --max-old-space-size=8192 ./src/starter.js && babel-node --max-old-space-size=8192 ./src/boot/index.js"

说明:

  • && 确保前一个命令(starter.js执行)完成且成功后,才启动主应用
  • 项目使用Babel转译,所以用babel-node执行src目录下的文件,保证语法兼容性

如果starter.js包含异步初始化操作(比如数据库连接、远程配置加载),需要等待异步逻辑完成后再启动应用,可调整脚本为:

"watch:dev": "cross-env NODE_ENV=development babel-node --max-old-space-size=8192 -e \"require('./src/starter.js').then(() => require('./src/boot/index.js'))\""

同时修改starter.js,让它返回Promise以等待异步操作结束:

// src/starter.js
async function init() {
  // 这里编写异步初始化逻辑,例如:
  // await connectToDatabase();
  // await loadRemoteConfig();
}

// 返回Promise,让命令行可以等待初始化完成
module.exports = init();

方案二:在主应用代码中引入starter.js(代码层面控制)

如果希望所有环境(不止dev)启动时都先执行starter.js,可以直接在主应用入口./src/boot/index.js的最顶部引入它:

// src/boot/index.js
// 先执行starter.js的初始化逻辑
require('../starter.js');

// 接着执行原来的应用启动代码
// ...

这种方式无需修改任何脚本配置,每次启动应用都会自动先执行starter.js的内容。

验证修改

修改完成后执行npm run dev,starter.js会在主应用启动前被执行,同时nodemon仍会正常监听文件变化,重启时也会重复这个执行顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:39