现在Node的ESModule使用体验还是很糟糕
最近有一个命令行工具的需求,决定用oclif开发,之前做demo用了node-fetch@3,只支持ESModule,然后就想试试用ESModule开发。
- 首先就遇到了TS加载ts文件找不模块的问题,找到了解决方案https://github.com/TypeStrong/ts-node/issues/1777
- 然后遇到了shebang的问题 加一个有点丑的.mjs解决
- 看了oclif的issues,让ts-node也可以运行shebanghttps://github.com/oclif/core/issues/421
- oclif的测试方案完全基于Commonjs,运行起来直接挂,缺少维护
- 测试框架选用的mocha,目前来说一切还好,但是不支持–watch参数https://github.com/mochajs/mocha/issues/4374
总之用ESMododule有大量意想不到的坑...体验很糟糕
4 回复
我常用nodejs写一些小工具,同样是因为node-fetch@3从CommonJS转到了ESModule。
一开始最不习惯的是没有了__dirname 跟 __filename,不过现在已经习惯了用 URL + import.metaurl 表示文件路径。
ESModule可以引用CommonJS的模块,从这一点看还是ESModule的项目做起来自由一点。
@Geylnu ts 项目源码里面 import 相对路径文件时全部添加 .js 后缀。
ts-node 和 nodejs 有个新参数 experimentalSpecifierResolution 可以在执行的时候传入,改变解析文件(后缀名)的逻辑