Ошибки и исправление конфига rollup.config.js после обновления Node

На примере обновления Node исправляем ошибки в rollup.js после запуска компиляционных npm команд.

После обновления Node.js могут возникнуть разного рода ошибки.

Вариант ошибок

При запуске команды npm run dev после обновления возникли ошибки:

(node:2023) Warning: To load an ES module, set «type»: «module» in the package.json or use the .mjs extension.
(Use `node —trace-warnings …` to show where the warning was created)

[!] RollupError: Node tried to load your configuration file as CommonJS even though it is likely an ES module. To resolve this, change the extension of your configuration to «.mjs», set «type»: «module» in your package.json file or pass the «—bundleConfigAsCjs» flag.

Original error: Cannot use import statement outside a module
https://rollupjs.org/guide/en/#—bundleconfigascjs
/app/templates/svelte/rollup.config.js:1
import svelte from ‘rollup-plugin-svelte’;
^^^^^^

SyntaxError: Cannot use import statement outside a module
at internalCompileFunction (node:internal/vm:74:18)
at wrapSafe (node:internal/modules/cjs/loader:1141:20)
at Module._compile (node:internal/modules/cjs/loader:1182:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Function.Module._load (node:internal/modules/cjs/loader:922:12)
at ModuleWrap. (node:internal/modules/esm/translators:169:29)
at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Немного теории

Никогда не стоит игнорировать ошибки, которые показывает команда:

npm install

Проигнорировать ошибки можно командой:


npm install —force

В этом случае будут проигнорированы все предупреждения и установятся все пакеты. Однако лучше так не делать. Можно пропустить ошибки вида:

npm WARN deprecated @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated rollup-plugin-terser@7.0.2: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
npm WARN deprecated rollup-plugin-commonjs@10.1.0: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.

А затем пытаться исправить то, что не правится без контекста проигнорированных ранее ошибок.

Из ошибок выше видно, что rollup-plugin-terser устарел и вместо него используется @rollup/plugin-terser.

Это значит, что в файле package.json нужно поменять пакеты, а также поменять в файлах конфига rollup.config.js.

Одна из ошибок, которая возникла после обновления Node.js и пакетов:

Ошибка Node tried to load your configuration as an ES module

Reloading updated config…
[!] RollupError: Node tried to load your configuration as an ES module even though it is likely CommonJS. To resolve this, change the extension of your configuration to «.cjs» or pass the «—bundleConfigAsCjs» flag.

Original error: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a ‘.js’ file extension and ‘/app/templates/svelte/package.json’ contains «type»: «module». To treat it as a CommonJS script, rename it to use the ‘.cjs’ file extension.
https://rollupjs.org/guide/en/#—bundleconfigascjs
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a ‘.js’ file extension and ‘/app/templates/svelte/package.json’ contains «type»: «module». To treat it as a CommonJS script, rename it to use the ‘.cjs’ file extension.
at file:///app/templates/svelte/rollup.config.js?1669819006568:24:22
at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Для исправления в свой package.json нужно добавить:

"type": "module",

А дальше в файле rollup.config.js изменить такие:

import { terser } from '@rollup/plugin-terser';

на это

import terser from '@rollup/plugin-terser';

Убрать все require

В том числе, если встречаются такие моменты:

postcss: {
    plugins: [require('autoprefixer')],
},

Заменить на это:

import postcss from "autoprefixer";

postcss: {
    plugins: [postcss],
},

Все это будет работать только в том случае, если в пакетах нет несовместимостей. Это важно, иначе исправления не решат проблему. Вместо одной ошибки будет вылезать другая.

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Ошибки и исправление конфига rollup.config.js после обновления Node"