起因
最近写一个Node.js的项目,使用ts-node做为运行时,在使用top-level await
的时候,遇到了一些问题。
具体过程
我是在VSCode里写的项目,实际上我debug模式和生产部署都是使用ts-node,感觉非常方便,一个配置都不需要就能这么Run起来。
但是我在处理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模块是不用添加扩展名的啊。也索性放弃了