• 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')
    
    • 1

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

  • 相关阅读:
    Leetcode刷题详解——盛最多水的容器
    CTRL C V
    Python基础教程:print输出带颜色的方法详解
    【PTHREAD】线程互斥与同步之读写锁
    记录学习--分页时会查两遍数据库吗
    【软件与系统安全笔记】一、引入
    Java基础学习——方法的定义与调用
    (部署服务器系列三)eclipse远程调试springboot项目代码
    微信小程序——组件、API
    typeof的作用
  • 原文地址:https://blog.csdn.net/qq_42501092/article/details/127842113