我有两个脚本来为项目设置数据库,文件需要连续运行,其中每个文件仅在前一个文件完成后才运行。
// A manual run from bash/terminal would look like this:
node ./db_init.js
node ./db_seed1.js
node ./db_import_data.js
node ./db_seed2.js
每个文件都是“执行自身”,如下所示:
// db_init.js
const initTables = async () => {
await sequelize.sync({force: true})
}
initTables() // <--- self executing
有没有一种简单的方法可以连续运行所有4个文件,而每个文件都在等待上一个文件的完成。
问题的关键在于我想保持文件“自我执行”的“自我执行”性质,以便您仍然可以像node ./db_init.js
答案 0 :(得分:2)
否,节点CLI没有任何选项可完全完成您想要的操作。 -r
标志可能会关闭,但无法正确排序脚本。例如node -r ./db_init.js -r ./db_seed1.js ...
将并行而不是连续运行所有脚本。
如果您更改每个脚本以导出其工作的承诺(例如,将行initTables()
更改为module.exports = initTables()
),则可以制作包装runScripts.js
的脚本,如下所示:>
(async () => {
for (const script of process.argv.slice(2)) { // slice(2) chops off 'node', 'runScript.js'
await require(script);
}
})().catch(e => console.error(e))
然后像node ./runScripts.js ./db_init.js ./db_seed1.js ./db_import_data.js ./db_seed2.js