Node.JS:通过require或从命令行使模块可运行
我有一个脚本Node.JS:通过require或从命令行使模块可运行,node.js,require,Node.js,Require,我有一个脚本setupDB.js,它异步运行,打算从命令行调用。最近,我将测试用例添加到我的项目中,其中一些需要设置数据库(从而执行前面提到的脚本) 现在,我想知道脚本什么时候完成了它的工作。目前,我只是在要求setupDB.js之后等待几秒钟,然后才开始测试,这显然是个坏主意 简单地导出带有回调参数的函数的问题在于,脚本可以在没有任何开销的情况下运行非常重要,这意味着没有命令行参数,没有额外的函数调用等,因为它是更大构建过程的一部分 您对更好的方法有什么建议吗?我现在是这样处理的:我导出了一个
setupDB.js
,它异步运行,打算从命令行调用。最近,我将测试用例添加到我的项目中,其中一些需要设置数据库(从而执行前面提到的脚本)
现在,我想知道脚本什么时候完成了它的工作。目前,我只是在要求setupDB.js
之后等待几秒钟,然后才开始测试,这显然是个坏主意
简单地导出带有回调参数的函数的问题在于,脚本可以在没有任何开销的情况下运行非常重要,这意味着没有命令行参数,没有额外的函数调用等,因为它是更大构建过程的一部分
您对更好的方法有什么建议吗?我现在是这样处理的:我导出了一个执行设置的函数。在开始时,我检查脚本是否已从命令行调用,如果是,我只需调用函数。同时,我也可以直接从另一个模块调用它并传递回调
if (require.main === module) {
// Called from command line
runSetup(function (err, res) {
// do callback handling
});
}
function runSetup(callback) {
// do the setup
}
exports.runSetup = runSetup;
我最近也在寻找这一点,并遇到了一个有点相关的问题:“这帮助我在几分钟前构建了类似于以下内容的东西,其中导出仅在用作模块时运行,而CLI库仅在作为脚本运行时才需要
function doSomething (opts) {
}
/*
* Based on
* https://stackoverflow.com/a/46962952/7665043
*/
function isScript () {
return require.main && require.main.filename === /\((.*):\d+:\d+\)$/.exec((new Error()).stack.split('\n')[ 2 ])[ 1 ]
}
if (isScript) {
const cli = require('some CLI library')
opts = cli.parseCLISomehow()
doSomething(opts)
} else {
module.exports = {
doSomething
}
}
这可能是个不好的主意,但我不是专家。npm模块可以帮助解决这个问题