关于Node.js顶级await的经历

起因

最近写一个Node.js的项目,使用ts-node做为运行时,在使用top-level await的时候,遇到了一些问题。

具体过程

我是在VSCode里写的项目,实际上我debug模式和生产部署都是使用ts-node,感觉非常方便,一个配置都不需要就能这么Run起来。

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

但是我在处理Mongo/Redis链接时,为了图省事,我想直接在await connect(),结果启动程序报错:

SyntaxError: await is only valid in async functions and the top level bodies of modules

一开始,我还尝试着修改package.json还有创建tsconfig.json来解决这个问题,但最后总是有点不尽人意,而且无端添加了好多配置项。尝试了二两个小时后也没有找到完美的方案能够兼顾VSCode debug和生产部署,索性就放弃了。

但同事后来推荐了一个TypeScript运行时叫esno,安装后直接0配置启动,直接就支持顶级await,完美。但这东西在生产部署又可能有性能问题,所以最后还是放弃了。

虽然也考虑过Debug模式用esno,生产部署时先用tsc编译再用node执行,但在用tsc编译后执行代码时总是提示找不到相关的模块,因为它的引用必须要包含扩展名,可实际开发的时候import模块是不用添加扩展名的啊。也索性放弃了

分享

TITLE: 关于Node.js顶级await的经历

LINK: https://www.qttc.net/564-about-top-level-await.html

NOTE: 原创内容,转载请注明出自琼台博客