inquirer.js 怎么才能让答案变得全局共享
发布于 4 年前 作者 wangi4myself 4259 次浏览 来自 问答

inquirer.js 执行的代码是一个回调 但是我想把回调的结果 通过module.exports 变得全局共享,谷歌了半天外加英文不算很好没有得到答案。inquirer.prompt(questions).then(answers=>{ module.exports = { answers } }) 本意就是只需要执行一次inquirer.js 但是得到的结果我可以在任何文件里通过require的结果得到。有没有哪位同学尝试过

5 回复

跟 inquirer 其实没啥关系。 全局共享的思路是不好的。

@atian25 但是假设我写了一个inquirer的脚本,那如果不能require 回调的结果就意味着我所有有关inquirer的东西都只能写在一个js文件里了。

自己顶一波

你代码的组织问题,一般是需要一个 context 一路下去的,可以看下 egg-bin、common-bin 这几个库我们是怎么写的。

你可以exports一个promise,在使用的地方,用await或.then来调用,你这份数据毕竟是一个异步的数据,你是需要考虑数据有没有准备好的。

// module
module.exports = inquirer.prompt(questions);
// require
require("module").then(answers=>{});

如果你可以确定数据能提前准备好,只要想把这一个异步调用释放掉,你还可以这样写:

const response = {};
inquirer.prompt(questions).then(answers=>{
	response.answers=answers;
});
module.exports = response;

你要注意,上面的这段代码是有风险的,如果你在then回调之前访问了response,你得到的将会是个undefined

回到顶部