Что означает "Генератор кода деоптимизировал стилирование [некоторого файла], поскольку он превышает максимальный" 100 КБ "?

Я добавил новый проект npm в свой проект и потребовал его в одном из моих модулей.

Теперь я получаю это сообщение от webpack,

build modulesNote: The code generator has deoptimised the styling of "D:/path/to/project/node_modules/ramda/dist/ramda.js" as it exceeds the max of "100KB".

Что это значит? Нужно ли предпринимать какие-то действия?

Ответ 1

Это связано с параметром compact для Babel-компилятора, который командует "не включать лишние символы пробелов и терминаторы строк. Если для параметра" auto "compact установлено значение true при размерах вводa > 100 КБ". По умолчанию его значение "auto", поэтому, вероятно, причина, по которой вы получаете предупреждение. См. Вавилонская документация.

Вы можете изменить эту опцию из Webpack с помощью параметра запроса . Например:

loaders: [
    { test: /\.js$/, loader: 'babel', query: {compact: false} }
]

Ответ 2

Кажется, это Вавилонская ошибка. Я предполагаю, что вы используете babel-loader и не исключаете внешние библиотеки из теста загрузчика. Насколько я могу судить, сообщение не вредно, но вы все равно должны сделать что-то вроде этого:

loaders: [
    { test: /\.js$/, exclude: /node_modules/, loader: 'babel' }
]

Посмотрите. Это было?

Ответ 3

Любой из следующих трех вариантов избавляется от сообщения (но по разным причинам и с различными побочными эффектами, я полагаю):

  1. исключить каталог node_modules или явно include каталог, в котором находится ваше приложение (которое, по-видимому, не содержит файлов, превышающих 100 КБ)
  2. установите опцию Babel compact в true (фактически любое значение, кроме "auto")
  3. установите опцию Babel compact на false (см. выше)

# 1 в приведенном выше списке может быть достигнуто либо путем исключения каталога node_modules либо node_modules явного включения каталога, в котором находится ваше приложение.

Например, в webpack.config.js:

let path = require('path');
....
module: {
     loaders: [
          ...
          loader: 'babel',
          exclude: path.resolve(__dirname, 'node_modules/')

... или с помощью include: path.resolve(__dirname, 'app/') (снова в webpack.config.js).

№ 2 и № 3 в приведенном выше списке могут быть выполнены методом, предложенным в этом ответе, или (моим предпочтением) путем редактирования файла .babelrc. Например:

$ cat .babelrc 
{
    "presets": ["es2015", "react"],
    "compact" : true
}

Протестировано со следующей настройкой:

$ npm ls --depth 0 | grep babel
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]

Ответ 4

Я попробовал Ricardo Stuven, но это не сработало для меня. Что в итоге закончилось добавлением "compact": false в мой .babelrc файл:

{
    "compact": false,
    "presets": ["latest", "react", "stage-0"]
}

Ответ 5

Для более подробного объяснения читайте THIS LINK, это вариант Babel compiler который дает команду не включать лишние пробельные символы и ограничители строки. несколько раз назад его порог составлял 100KB 500KB а сейчас - 500KB.

Я предлагаю вам отключить эту опцию в вашей среде разработки, используя этот код в файле .babelrc.

{
    "env": {
      "development" : {
        "compact": false
      }
    }
}

Для производственной среды Babel используйте конфигурацию по умолчанию, которая является auto.

Ответ 6

В файле action/redux/webpack/babel исправлена ​​эта ошибка, удалив script текст тега text/babel

получена ошибка:

<script type="text/babel" src="/js/bundle.js"></script>

нет ошибки:

<script src="/js/bundle.js"></script>

Ответ 7

В Webpack 4 с несколькими правилами для модулей вы просто делаете что-то подобное в своем правиле .js:

{
     test: /\.(js)$/,
     loader: 'babel-loader',
     options: {
          presets: ['es2015'],    // or whatever
          plugins: [require('babel-plugin-transform-class-properties')], // or whatever
          compact: true    // or false during development
     }
},

Ответ 8

Возможно, это не тот случай, когда исходный вопрос OP, но: если вы превышаете максимальный размер по умолчанию, это может быть признаком какой-то другой проблемы, которая у вас есть. в моем случае у меня было предупреждение, но в конечном итоге оно превратилось в ФАТАЛЬНУЮ ОШИБКУ: MarkCompactCollector: полупространственная копия, откат в старом поколении. Выделение не удалось - куча JavaScript из памяти. причина была в том, что я динамически импортировал текущий модуль, так что это закончилось бесконечным циклом...