Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

迁移到ESM上 #39

Closed
10 of 11 tasks
otakustay opened this issue Apr 25, 2021 · 1 comment
Closed
10 of 11 tasks

迁移到ESM上 #39

otakustay opened this issue Apr 25, 2021 · 1 comment
Labels
future Just requires attention if we love the future
Milestone

Comments

@otakustay
Copy link
Member

otakustay commented Apr 25, 2021

根据这个更新纪要,社区有大量的库正在向纯ESM的方向发展,编译为CommonJS的reSKRipt不跟上的话会无法继续使用社区最新的成果

使用ESM会需要Node >= 12,在近期版本中先加上这一限制

已知当前升级到了ESM不再兼容CommonJS的库,这些库以后不能再继续升版本了

  • imagemin
  • log-symbols

我们需要做的:

  • 给CLI设定要求Node在12以上
  • import加上文件后缀名,保持全路径
  • 把所有动态的require干掉,可以异步的就用await import,不可以的就做成静态import。这可能会因为增加过多的import导致初始化性能有所下降,要做一次测试
  • 干掉__dirname__filename,转用import.meta.url处理
  • require包在ESM下工作不符合预期,用@reskript/coreresolveSync替换
  • 如果有import 'xxx.json'的情况,改用fs.readFile处理
  • 研究下ESM和bin是不是兼容,是否能直接执行
  • 要求reskript.config.js变为reskript.config.mjs并使用类似export const build = {}的形式编写配置
  • 研究下jest的配置怎么去解析,现在用的是require('jest.config.js')
  • 加上相关的eslint规则避免错误地使用require
  • 关于reskript.config.js的多次加载,可以用import 'reskript.config.js?v=xxx'这种形式来实现,但可能用久了内存会爆,需要小心:Invalidate cache when using import nodejs/node#49442

一些社区相关的需要解决的问题:

@otakustay otakustay added this to the 2.0 milestone Jun 4, 2021
@otakustay otakustay modified the milestones: 2.0, 3.0 Aug 19, 2021
@otakustay otakustay added the future Just requires attention if we love the future label Aug 27, 2021
@otakustay
Copy link
Member Author

otakustay commented Dec 26, 2021

现在来看,所有最表面的CLI包是可以ESM化的。如果改造reskript.config.js为ESM的话,插件们也可以ESM化,剩下的就不行了。

遗留问题:

  • webpackloader不能是ESM,所以cli-play有问题,跟进webpack这个PR
  • config-webpack的测试过不去,跟进vitest的issue
  • vitest不支持在CJS项目里用,跟进这个issue
  • config-lintconfig-jest导出来的配置需要是.cjs后缀
  • postcss插件如果要按需引入,且由用户安装,那么就不能静态import了,动态import又是异步的,这里需要想办法做一层包装

一堆需要修类型的包:

otakustay added a commit that referenced this issue Jan 4, 2022
BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 6, 2022
BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 6, 2022
BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 12, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 13, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 15, 2022
otakustay added a commit that referenced this issue Jan 18, 2022
otakustay added a commit that referenced this issue Jan 20, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 20, 2022
otakustay added a commit that referenced this issue Jan 21, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 21, 2022
otakustay added a commit that referenced this issue Jan 23, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)

x
otakustay added a commit that referenced this issue Jan 23, 2022
otakustay added a commit that referenced this issue Jan 29, 2022
当前完成了最认本部分逻辑的ESM化,剩余的包主要为:

- 各类插件包,这需要先支持`reskript.config.{mjs|ts}`的ESM化
- 几个webpack loader,要等待webpack支持
- eslint插件无法ESM化
- jest配置无法ESM化
- 受前几项影响,`core`和`settings`暂未ESM化

BREAKING CHANGE: 发布的包为纯ESM格式,无法通过CommonJS的`require`引入。参考[sinderesorhus的建议](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)
otakustay added a commit that referenced this issue Jan 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
future Just requires attention if we love the future
Projects
None yet
Development

No branches or pull requests

1 participant