На примере обновления 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 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 нужно добавить:
А дальше в файле rollup.config.js изменить такие:
на это
Убрать все require
В том числе, если встречаются такие моменты:
plugins: [require('autoprefixer')],
},
Заменить на это:
postcss: {
plugins: [postcss],
},
Все это будет работать только в том случае, если в пакетах нет несовместимостей. Это важно, иначе исправления не решат проблему. Вместо одной ошибки будет вылезать другая.