现在Node的ESModule使用体验还是很糟糕
发布于 2 年前 作者 Geylnu 2018 次浏览 来自 分享

最近有一个命令行工具的需求,决定用oclif开发,之前做demo用了node-fetch@3,只支持ESModule,然后就想试试用ESModule开发。

  1. 首先就遇到了TS加载ts文件找不模块的问题,找到了解决方案https://github.com/TypeStrong/ts-node/issues/1777
  2. 然后遇到了shebang的问题 加一个有点丑的.mjs解决
  3. 看了oclif的issues,让ts-node也可以运行shebanghttps://github.com/oclif/core/issues/421
  4. oclif的测试方案完全基于Commonjs,运行起来直接挂,缺少维护
  5. 测试框架选用的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 可以在执行的时候传入,改变解析文件(后缀名)的逻辑

回到顶部