Node.js中为何prompt-sync模块导入需额外调用函数?
为什么prompt-sync导入后需要额外调用函数?
这本质是不同模块导出内容类型的区别:
- 像
http、fs、lodash这类模块,require()之后直接返回的是一个包含功能方法的对象(或者直接是可用的工具集),所以拿到变量就能直接用,比如http.createServer()、low.map()。 - 而
prompt-sync模块导出的是一个工厂函数——也就是用来生成实际功能函数的函数。你必须调用这个工厂函数,它才会返回真正能用来读取用户控制台输入的prompt函数。
举个直观的例子:
如果你拆分步骤写:
const promptFactory = require('prompt-sync'); // 这时候promptFactory是个函数,不是直接能用的输入工具 const prompt = promptFactory(); // 调用工厂函数,得到真正的prompt函数 prompt('请输入内容:'); // 现在才能正常发起输入请求
所以大家习惯把这两步合并成一行:const prompt = require('prompt-sync')();,直接拿到可用的输入函数。
另外,这个工厂函数还支持传入配置参数定制行为,比如:
const prompt = require('prompt-sync')({ sigint: true }); // 允许用Ctrl+C终止输入
这也是作者设计成工厂函数的原因——给用户留了定制功能的空间。
内容的提问来源于stack exchange,提问作者Brijesh Roy
相关产品推荐
相关产品推荐

