现在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的项目做起来自由一点。
ts + esm 还行吧,用 ts-node-esm
当执行器或者添加作为 hashbang
@waitingsong 你是怎么解决后缀的问题的?现在就只能加载ts文件时加一个丑陋的.js。。。
@Geylnu ts 项目源码里面 import 相对路径文件时全部添加 .js
后缀。
ts-node 和 nodejs 有个新参数 experimentalSpecifierResolution
可以在执行的时候传入,改变解析文件(后缀名)的逻辑