rollup 3.3 出现 import 错误 Cannot use import statement outside a module

背景

技术栈:rollup: ^3.3.0
我之前也有尝试用过 rollup,但是我没太注意版本号,就是记得之前在 rollup.config.js 的文件中是可以写 es6 的语法的,但是最近【2022年11月左右】我使用 rollup 的时候遇到一个问题,不能使用 import 语法了

问题

就是这个 SyntaxError: Cannot use import statement outside a module, 一个很常见的问题,一开始我以为是我写错,后来发现配置文件也没啥问题呀
在这里插入图片描述
然后用搜索引擎搜了一下,好像也没看到什么好的解决方案,有人说把 rollup.config.js 改成 rollup.config.mjs,我尝试过,如果只是单纯的把.js 改成 .mjs 是行不通,我看着也很别扭,我在这个错误里发现了一个配置项。
在这里插入图片描述
然后我就去rollup 的官方文档 里搜索这个配置项就找到下面的解释
在这里插入图片描述
英文也不是特别好,看个七七八八吧,大概就是使用这个配置项会让rollup 在执行前把我的配置文件中 ES moudule 变成 CommonJS,哪怕是 resolve 或者 __dirname 引用进来的配置是使用 esmodule 写的,也是可以被转成 CommonJS 的。大概就是这个意思咯,要不要用就看自己的啦,但是不用好像就不能用 import 这类 ESModule 的语法的。 package.json 中的 type 配置成 module 也是行不通。

总结

也算是采了个坑了吧,我经常遇到这种,就是安装的模块之前是使用 CommonJS 写的,然后你安装新的版本的时候,他就是 ESModule 的了,然后一使用就报错。
比如写 node 的小伙伴经常会用到的一个库 execa,在 5.x 的版本里像下面这样使用是完全没问题。相信很多小伙伴还是习惯这样写的

const execa = require('execa')

但是现在不指定版本默认安装的时候,他就是 6.x 的了,然后再这么写就给你报错
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /xxx/node_modules/execa/index.js
要么就用回之前的版本,要么就给项目配置 ESModule 。但是配置 ESModule 的话,遇到一些没有 ESmodule 的库又要用回 CommonJs 的写法,就很杂。现在的技术迭代都非常的快,在使用的时候,还是要稍微注意一下版本更新,遇到各种版本问题也就差不多是一些配置项 或者写法的问题,不要慌,官方文档走起。希望解决了一个问题,能让自己遇到这一类问题会更有信心

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值