¿Qué significa "El generador de código ha desestimulado el estilo de [algún archivo] ya que excede el máximo de" 100 KB ""?


164

Agregué un nuevo paquete npm a mi proyecto y lo requiero en uno de mis módulos.

Ahora recibo este mensaje de 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".

Qué significa eso? ¿Necesito tomar alguna acción?


¿Puedes poner tu configuración de Webpack en alguna parte? ¿Cuál es el paquete NPM en cuestión?
Juho Vepsäläinen

Johan, asegúrate de aceptar la respuesta que resolvió esto por ti
Dana Woodman

Respuestas:


151

Esto está relacionado con la compactopción del compilador de Babel, que ordena "no incluir caracteres de espacio en blanco superfluos y terminadores de línea. Cuando se establece en 'auto' compacto se establece en verdadero en tamaños de entrada de> 100 KB". De forma predeterminada, su valor es "auto", por lo que probablemente esa sea la razón por la que recibe el mensaje de advertencia. Ver la documentación de Babel .

Puede cambiar esta opción desde Webpack utilizando un parámetro de consulta . Por ejemplo:

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

16
Y si tiene múltiples cargadores, puede usar en ?compact=falselugar del queryparámetro. Por ejemplo:{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
kendsnyder

44
también podemos agregar la opción al archivo .babelrc para limpiar el archivo webpack.config.js, como agregar {"compact": true} al archivo .babelrc.
Ron

3
@Ricardo Stuven, pero ¿por qué debería cambiarlo a falso? parece algo positivo "no incluir caracteres de espacios en blanco superfluos y terminadores de línea"
omriman12

1
@Ben, entonces, ¿básicamente se establecería en falso solo cuando se desarrolle?
omriman12

2
@ omriman12 Depende de cómo va a utilizar la salida. Si se trata de una construcción de producción que se va a minimizar, entonces no tiene ningún valor establecer este parámetro en false. Para casos como el mío donde el formato de salida es importante, eso tiene valor. Como la mayoría de las cosas, depende. :)
Ben

48

Esto parece ser un error de Babel . Supongo que usa babel-loader y no excluye bibliotecas externas de su prueba de cargador. Por lo que puedo decir, el mensaje no es dañino, pero aún debe hacer algo como esto:

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

Echar un vistazo. ¿Fue eso?


1
Extraño, veo el mismo mensaje (también para ramda), aunque lo hago exclude: /node_modules/.
Roman Pominov

¿El mismo camino también? Tal vez su biblioteca externa se encuentra en otro lugar? Si no, también puedes probar la solución de Ricardo. Este problema no es muy crítico.
mhelvens

Culpa mía. Estaba revisando la configuración incorrecta. El actual no tenía exclude.
Roman Pominov

Encontré esta respuesta mejor. Gracias @mhelvens
Mosia Thabo

22

Cualquiera de las tres opciones siguientes elimina el mensaje (pero supongo que por diferentes razones y con diferentes efectos secundarios):

  1. excluya el node_modulesdirectorio o explícitamente includeel directorio donde reside su aplicación (que presumiblemente no contiene archivos de más de 100 KB)
  2. establezca la opción de Babel compact en true(en realidad cualquier valor que no sea "auto")
  3. configura la opción de Babel compacten false(ver arriba)

# 1 en la lista anterior se puede lograr excluyendo el node_modulesdirectorio o incluyendo explícitamente el directorio donde reside su aplicación.

Ej. En webpack.config.js:

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

... o usando include: path.resolve(__dirname, 'app/')(nuevamente en webpack.config.js).

# 2 y # 3 en la lista anterior se pueden lograr mediante el método sugerido en esta respuesta o (mi preferencia) editando el .babelrcarchivo. P.ej:

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

Probado con la siguiente configuración:

$ npm ls --depth 0 | grep babel
├── babel-core@6.7.4
├── babel-loader@6.2.4
├── babel-preset-es2015@6.6.0
├── babel-preset-react@6.5.0

8

Traté a la manera de Ricardo Stuven pero no funcionó para mí. Lo que funcionó al final fue agregar "compact": false a mi archivo .babelrc:

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

1
Usando babel 6.5.x, webpack 2, tuve el mismo mensaje pero para lodash.js, y esto solucionó el problema.
phil_lgr

Vine a buscar esto :)
informador

Gracias, tuve exactamente lo mismo
Henkie85

4

Para leer más explicaciones THIS LINK, es una opción de Babel compileresos comandos no incluir caracteres de espacios en blanco superfluos y terminadores de línea. Hace algunas veces su umbral era 100KBpero ahora lo es 500KB.

Le ofrezco que deshabilite esta opción en su entorno de desarrollo, con este código en el .babelrcarchivo.

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

Para el entorno de producción, Babeluse la configuración predeterminada que es auto.


2

En react / redux / webpack / babel build se corrigió este error al eliminar el tipo de etiqueta de script text / babel

tiene error:

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

No hay error:

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

1

en webpack 4 con múltiples reglas de módulo, simplemente haría algo como esto en su regla .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
     }
},

1

Tal vez este no sea el caso de la pregunta OP original, pero: si excede el tamaño máximo predeterminado, esto puede ser un síntoma de algún otro problema que tenga. en mi caso, tuve la advertencia, pero finalmente se convirtió en un ERROR FATAL: MarkCompactCollector: copia de semi-espacio, fallback en la antigua generación. La asignación falló - JavaScript no tiene memoria. la razón fue que importé dinámicamente el módulo actual , por lo que esto terminó con un bucle sin fin ...


Fue un síntoma para mí: comencé a eliminar / agregar mis importaciones para intentar localizarlo. El script ofensivo estaba usando un require dinámico ( require('../../../' + a + '/' + b)). Eliminarlo solucionó el problema (y nunca volverá).
Frank

No estoy seguro de por qué esto fue rechazado, este era exactamente mi problema. Gracias shmuel!
Aron
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.