如何在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
相关产品推荐
相关产品推荐

