如何在NX中构建并运行依赖ESM库的Node应用?
NX工作区Express后端引入ESM库报错问题
背景
我有一个包含React前端和Express后端的NX工作区,给后端添加依赖时,引入ESM库遇到了问题。执行nx run express-server:serve命令(使用@nx/js:node执行器)时,出现以下错误:Error [ERR_REQUIRE_ESM]: require() of ES Module Instead change the require of index.js in null to a dynamic import() which is available in all CommonJS modules.
调研
我查了很多相关帖子和线程,但没找到解决方案。我觉得这不是NX的bug,只是现在仅支持ESM的库越来越多,肯定有可行的解决办法。我试过把工作区升级为ESM,但NX对ESM的支持不够,最后引发了其他错误。我希望继续用NX,同时能引入仅支持ESM的库。
相关线程
- NX仓库Issue #11335
- NX仓库PR #10414
- NX仓库Issue #10565
- NX仓库Issue #7872
- NX仓库Issue #10296
- NX仓库Issue #18974
示例代码
示例仓库:nx-express-esm
- 执行
npm i安装依赖 - 执行
nx run express-server:build(可正常运行) - 执行
nx run express-server:serve(触发上述错误)
这是用于演示问题的简单示例。我知道可以将nanoid降级到3版本,但还有其他无法降级的ESM库。
内容的提问来源于stack exchange,提问作者prichmond
相关产品推荐
相关产品推荐

