Ошибка типа: Не удается прочитать свойство «exec» неопределенного значения (проблема mb со стилями)

#reactjs #next.js #webpack-5

Вопрос:

Проект: Next.js (11 в)

После обновления моего проекта с Next8 до Next11 со всеми библиотеками у меня возникли миллионы проблем, я исправил их (некоторые временные проблемы) и теперь у меня ошибка Webpack:

 $ next build amp;amp; tsc --project tsconfig.server.json
info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
info  - Skipping validation of types  
Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade caniuse-lite browserslist`
Warning: Built-in CSS support is being disabled due to custom CSS configuration being detected.
See here for more info: https://nextjs.org/docs/messages/built-in-css-disabled

@zeit/next-typescript is no longer needed since Next.js has built-in support for TypeScript now. Please remove it from your next.config.js and your .babelrc

(node:30015) [DEP_WEBPACK_COMPILATION_NORMAL_MODULE_LOADER_HOOK] DeprecationWarning: Compilation.hooks.normalModuleLoader was moved to NormalModule.getCompilationHooks(compilation).loader
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:30015) [DEP_WEBPACK_MAIN_TEMPLATE_RENDER_MANIFEST] DeprecationWarning: MainTemplate.hooks.renderManifest is deprecated (use Compilation.hooks.renderManifest instead)
(node:30015) [DEP_WEBPACK_CHUNK_TEMPLATE_RENDER_MANIFEST] DeprecationWarning: ChunkTemplate.hooks.renderManifest is deprecated (use Compilation.hooks.renderManifest instead)
(node:30015) [DEP_WEBPACK_MAIN_TEMPLATE_HASH_FOR_CHUNK] DeprecationWarning: MainTemplate.hooks.hashForChunk is deprecated (use JavascriptModulesPlugin.getCompilationHooks().chunkHash instead)
(node:30015) [DEP_WEBPACK_COMPILATION_OPTIMIZE_CHUNK_ASSETS] DeprecationWarning: optimizeChunkAssets is deprecated (use Compilation.hooks.processAssets instead and use one of Compilation.PROCESS_ASSETS_STAGE_* as stage option)
(node:30015) [DEP_WEBPACK_CHUNK_MODULES_ITERABLE] DeprecationWarning: Chunk.modulesIterable: Use new ChunkGraph API
TypeError: Cannot read property 'exec' of undefined
at /home/roma/project/my-project/node_modules/next-size/lib/asset-size-plugin.js:88:66
at Array.map (<anonymous>)
at /home/roma/project/my-project/node_modules/next-size/lib/asset-size-plugin.js:88:35
at Array.sort (<anonymous>)
at AssetsSizePlugin.printAssetsSize (/home/roma/project/my-project/node_modules/next-size/lib/asset-size-plugin.js:86:10)
at /home/roma/project/my-project/node_modules/next-size/lib/asset-size-plugin.js:132:12
at Hook.eval [as callAsync] (eval at create (/home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:31934:10), <anonymous>:8:17)
at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:31736:14)
at /home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:46108:27
at /home/roma/project/my-project/node_modules/next/dist/compiled/neo-async/async.js:1:9380
at done (/home/roma/project/my-project/node_modules/next/dist/compiled/neo-async/async.js:1:14796)
at Hook.eval [as callAsync] (eval at create (/home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:31934:10), <anonymous>:6:1)
at /home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:45962:33
at /home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:29554:16
at /home/roma/project/my-project/node_modules/next/dist/compiled/webpack/bundle5.js:29471:14
at FSReqCallback.oncomplete (fs.js:180:23)
info  - Creating an optimized production build  
Failed to compile.


./node_modules/rc-slider/assets/index.css
Error: MainTemplate.hooks.hotBootstrap has been removed (use your own RuntimeModule instead)


> Build error occurred
Error: > Build failed because of webpack errors
at /home/roma/project/my-project/node_modules/next/dist/build/index.js:15:924
at async Span.traceAsyncFn (/home/roma/project/my-project/node_modules/next/dist/telemetry/trace/trace.js:6:584)
error Command failed with exit code 1.
 

Если я правильно понимаю, новая версия webpack отказывается импортировать css-файлы, как это было раньше:

_app.js файл:

 import 'styles/main.scss';
import 'styles/cropper.scss';
import 'styles/prettycheckbox.scss';

...
 

next.config.js

 const webpack = require('webpack');
const withPlugins = require('next-compose-plugins');
const withCss = require('@zeit/next-css');
const withSass = require('@zeit/next-sass');
const withTypescript = require('@zeit/next-typescript');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const withPurgeCss = require('next-purgecss');
const whitelister = require('purgecss-whitelister');
const withSize = require('next-size');


module.exports = withSize();
class TailwindExtractor {
  static extract(content) {
    return content.match(/[A-Za-z0-9-_:/] /g) || [];
  }
}

const nextConfig = {
  typescript: {
    // !! WARN !!
    // Dangerously allow production builds to successfully complete even if
    // your project has type errors.
    // !! WARN !!
    ignoreBuildErrors: true,
  },
  publicRuntimeConfig: {
  },
  webpack(config, { isServer, buildId, dev }) {
    config.module.rules.push({
        test: /.(raw)(?v=[0-9].[0-9].[0-9])?$/,
        use: 'raw-loader',
    });
    if (config.mode === 'production') {
        if (Array.isArray(config.optimization.minimizer)) {
            config.optimization.minimizer.push(new OptimizeCSSAssetsPlugin({}));
        }
    }

    config.plugins.push(new webpack.ContextReplacementPlugin(/moment[/\]locale$/, /en-gb/));

    if (!isServer amp;amp; !dev) {
        config.plugins.push(
            ...
        );
    }

    return config;
}
};

module.exports = withPlugins([
[ withSize, {}],
[ withTypescript, {} ],
[ withSass, {} ],
[ withCss, {} ],
[ withPurgeCss, {
    purgeCssPaths: [
        'styles/**/*',
        'pages/**/*.tsx',
        'pages/**/*.js',
        'app/**/*.tsx',
        'app/**/*.js',
        
    ],
    purgeCss: {
        whitelist: whitelister([
            './styles/cropper.scss',
            './node_modules/rc-slider/assets/index.css',
            './node_modules/react-quill/dist/quill.snow.css',
            './node_modules/react-day-picker/lib/style.css',
            './node_modules/react-datasheet/lib/react-datasheet.css',
        ]),
        extractors: [
            {
                extractor: TailwindExtractor,
                extensions: ['js', 'html', 'tsx', 'scss']
            }
        ],
    }
    
}],
],nextConfig);
 

В чем моя проблема и как я могу ее решить? Может быть, у меня чего-то еще не хватает в настройках или, наоборот, что-то лишнее?

огромная огромная благодарность всем, кто откликнулся!

Ответ №1:

Вы используете устаревший (и устаревший) плагин next-size , который зависит от IS_BUNDLED_PAGE_REGEX константы из next , которая была удалена с тех пор next@10.0.0 .

Этот пакет устарел, потому что он может замедлить ваши сборки. Обновление до Next.js 9 для получения статистики вывода сборки из коробки.

Комментарии:

1. Спасибо. Я это проверю. Да, я вижу, что на обратном пути он ругается на него. Связана ли с этим ошибка импорта стилей?

2. Трудно сказать наверняка. Но, похоже, по крайней мере некоторые из ваших пакетов могут устареть. Вам лучше сбегать yarn upgrade-interactive --latest посмотреть, что можно улучшить. И проверьте другие версии пакетов на совместимость.

3. Помогло с размером, но все еще была ошибка импорта css => ./node_modules/rc-слайдер/активы/индекс.Ошибка css: основная табличка. крючки. hotBootstrap удален (вместо этого используйте свой собственный модуль RuntimeModule) Я обновил все пакеты, возможно, настройки неверны по сравнению с предыдущей версией проекта (Next8)

4. Ошибка при любом импорте css, даже пользовательском ./приложение/компоненты/Формы/формы.Ошибка scss: Основная табличка. крючки. hotBootstrap удален (вместо этого используйте свой собственный модуль RuntimeModule)