使用 yarn 的时候,遇到 Error [ERR_REQUIRE_ESM]: require() of ES Module 怎么解决?

news/2025/2/12 0:23:10/

在这里插入图片描述

晚上回到家,我打开自己的项目,执行:

cd HexoPress
git pull --rebase
yarn install
yarn dev

拉取在公司 push 的代码,然后更新依赖,最后开始今晚的开发时候,意外发生了,竟然报错了,明明在公司时候还好好的。到底怎么回事?

/Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/cliui/build/index.cjs:291
const stringWidth = require('string-width');^Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/charles/Projects/HexoPress/node_modules/string-width/index.js from /Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/cliui/build/index.cjs not supported.
Instead change the require of index.js in /Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/cliui/build/index.cjs to a dynamic import() which is available in all CommonJS modules.at Object.<anonymous> (/Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/cliui/build/index.cjs:291:21)at Object.<anonymous> (/Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/yargs/build/index.cjs:1:60678)at Object.<anonymous> (/Users/charles/Projects/HexoPress/node_modules/concurrently/node_modules/yargs/index.cjs:5:30)at Object.<anonymous> (/Users/charles/Projects/HexoPress/node_modules/concurrently/dist/bin/concurrently.js:30:33) {code: 'ERR_REQUIRE_ESM'
}Node.js v20.8.1
error Command failed with exit code 1.

放狗在网上一搜,我发现这个问题并非我一个人遇到,竟然相当普遍。

其实我在公司,都还好好的,怎么可能回家就不对了呢?表面上看,这个问题的原因是在一个 Common JS 的代码里,用 require() 去引用了一个 ES Module 的类,这么操作是不支持的。推荐的解决办法是,将 require() 换成 import()。不用想,这当然是无稽之谈,很显然,出问题的代码根本就不是我写的,怎么可能去改呢?

是我引用的依赖,它的依赖,我的依赖我都不可能改,更别说依赖的依赖了。

比对整合了多篇帖子的内容后,我发现大家遇到这个错误是在不同的库,比如我这个场景是 concurrently 引用 string-width 的时候,网上还有很多人是引用 ts-node 的时候,别的也有。不过,不同场景遇到同一个错误,确实一点奇怪。终于,我发现,共性是大家都用了包管理器 yarn,有人说,将 yarn 升级到 3 就可以解决了。

我定睛一看,我 Node 版本是 20+,但是用的 yarn 竟然是 v1.22,为什么会用了一个这么老的 yarn 版本呢?这次我是真的乏力了,第一,我搞不清到底 yarn 有什么 bug 导致了这个问题,第二我搞不清为什么我会用这么旧一个 yarn 的版本。

解决方法很简单,就是升级 yarn,但是怎么升级呢?首先,你要确保你的 Node 环境的版本在 16.10+,然后:

yarn set version stable
yarn install

在项目里执行上面的命令,然后,你会发现升级完毕了。再次尝试,果然问题解决了。今天我执行完毕后,yarn 已经升级到了 v4.1.0 版本了。现在是 2024 年。

所以,如果你遇到了跟我一样的问题,可以先检查一下 yarn 的版本号是否过老?我前面也有文章提过,推荐初学者使用 npm 作为包管理器,至少我自己使用 npm 的时候,从没遇到过这个问题。确实是兼容性最好的包管理器。


http://www.ppmy.cn/news/1361055.html

相关文章

网络编程-NIO案例 与 AIO 案例

案例说明&#xff1a;一个简单的群聊实现&#xff0c;支持重复上下线。 NIO 服务端 public class NIOServer {public static void main(String[] args) throws IOException {ServerSocketChannel serverChannel ServerSocketChannel.open();// 初始化服务器serverChannel.b…

HEVC视频编解码标准学习笔记-1

视频编解码标准H.265/HEVC&#xff08;High Efficiency Video Coding&#xff09;通过将视频数据编码为更高效格式&#xff0c;大幅改善了视频流的压缩效率。这里主要介绍Tile、Slice和CTU的定义&#xff0c;以及介绍这些技术组件之间的相互关系。 CTU&#xff08;编码树单元&…

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理:把被识别的物体转成图、立体图、柱形图,3D模型、环境模型,然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容,然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去! 不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功…

西门子200SMART SB AE01的正确用法

西门子200SMART SB AE01&#xff0c;就是1路模拟量输入的SB板。信号板直接安装在 SR/ST CPU 本体正面&#xff0c;无需占用电控柜空间&#xff0c;安装、拆卸方便快捷。有些小型的系统如果只有1路模拟量输入&#xff0c;或者模块配置中恰好缺少1路模拟量输入&#xff0c;就可以…

window: C++ 获取自己写的dll的地址

我自己用C写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径. 大概就是这么个结构, 我自己封装了一个函数.只适用于window编程,因为里面用…

Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析

XactLockTableWait函数、transactionid锁的一些原理和分析 结论 更新行时&#xff0c;会根据xmax拿transactionid锁&#xff0c;等对应的事务结束。 如果结束是回滚&#xff0c;则heap_update继续更新。如果结束时提交&#xff0c;则heap_update要返回上层ExecUpdate调用EvalP…

【PostgreSQL内核学习(二十七) —— (编码转换)】

编码转换 概述处理客户端与服务器之间的字符串编码转换pg_do_encoding_conversion 函数FindDefaultConversionProc 函数FindDefaultConversion 函数 处理服务器与客户端之间的字符串编码转换两者的联系和区别 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&am…

Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)

想要批量化是否勾选项目预制体资源中Text组件BestFit属性&#xff08;此篇教程也可以操作其他组件的属性&#xff0c;只不过需要修改其中对应的代码&#xff09;&#xff0c;可以采用以下步骤。 1、在项目的Editor文件中&#xff0c;新建一个名为TextBestFitBatchProcessor的…