webpack --watch no está compilando archivos modificados


95

Intenté ejecutarlo webpack --watchy después de editar mis archivos JS, no activa una recompilación automática.

Intenté reinstalar webpackusando npm uninstallpero todavía no funciona.

¿Algunas ideas?

Respuestas:


72

FYI: parece que OS X puede tener una carpeta dañada y ya no enviar fsevents(que watchpack/chokidar / Finder usa) para sí mismo y las carpetas secundarias. No puedo estar seguro de que esto sea lo que te pasó, pero fue muy frustrante para mí y para un colega.

Pudimos cambiar el nombre de la carpeta principal corrupta y luego ver los eventos que se produjeron inmediatamente como se esperaba. Consulte esta publicación de blog para obtener más información: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

Las correcciones recomendadas del enlace anterior son:

  • reiniciar la computadora
  • comprobar el disco y reparar los permisos a través de la Utilidad de Discos
  • agregar la carpeta a la lista de privacidad de Spotlight (la lista de carpetas que no se indexarán), y luego eliminarla, forzando efectivamente una reindexación
  • cambiar el nombre de la carpeta, y luego posiblemente cambiarle el nombre
  • volver a crear la carpeta y mover el contenido antiguo a ella

Los dos primeros no funcionaron para nosotros, no probaron la sugerencia de Spotlight y la recreación no resultó necesaria.

Pudimos encontrar la carpeta raíz del problema abriendo Finder y creando archivos en cada carpeta principal sucesiva hasta que apareció una de inmediato (ya que Finder también se verá afectado por este error). La carpeta más raíz que no se actualiza es la culpable. Simplemente lo hicimos mvy mvlo devolvimos a su nombre original, y luego el observador trabajó.

No tengo idea de qué causa la corrupción, pero me alegra tener una solución.


3
Cambié el nombre de mi carpeta ~ / Sites a otra cosa, y luego volví a ~ / Sites y solucionó el error. También ha corregido varios otros errores en otros proyectos. Habla de matar 2 pájaros de 1 tiro. ¡¡¡Muchas gracias!!!
Kirk

Enfrenté este problema mientras trabajaba watchify, ninguno de los pasos funcionó conmigo, así que terminé usando poll arg. Mucha gente está pasando el argumento de la encuesta para navegar en lugar de mirar. Mi código se ve así:watchify(browserify(config.src,{}), {poll:100});
Ayman

1
No estoy 100% seguro de que esta sea la razón, pero apagar mi cliente de sincronización de Dropbox mientras intentaba ejecutar watchify funcionó para mí. Tanto la ejecución npm installcomo el cambio de nombre de un directorio son operaciones muy intensivas en la forma en que se implementa el cliente de sincronización.
jez

Reiniciar funcionó para mí en Linux, tuve este problema con webpack-dev-server, después de horas de tratar de averiguar por qué estaba funcionando ayer pero no hoy ...
DomA

1
¡Desde 2017, esta respuesta todavía me salvó del infierno! ¡Pensé que la configuración de mi paquete web estaba mal todo el tiempo!
iamjc015

88

Si su código no se vuelve a compilar, intente aumentar la cantidad de observadores (en Ubuntu):

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Fuente: https://webpack.github.io/docs/troubleshooting.html


sudo sysctl -pno funciona en Mavericks. ¿Alguna idea nueva?
Simon H

Hay un problema actual con Webpack 3 yModuleConcatenationPlugin . Omitir ModuleConcatenationPluginpermite que la observación continúe.
kross

@SimonH intentó mirar y cambiar /etc/sysctl.confdirectamente? Cambiar resp. establecer ese valor-clave? (Si no puede encontrar el comando para aplicar ad-hoc ( sysctl -p), entonces es un reinicio único, y debería estar bien ...)
Frank Nocke

4
Recomiendo verificar el número de relojes antes, para asegurarse de que no haya aumentado (dándole una idea, si esto pudiera generar el problema): es decirsudo sysctl -a | grep max_user_watches
Frank Nocke

Esto resolvió mi problema al ejecutar chroot (Ubuntu) en una Chromebook
Phil D.

40

Agregar el siguiente código a mi archivo de configuración de paquete web solucionó el problema, espero que esto ayude. No olvide ignorar su carpeta node_modules, ya que eso mataría el rendimiento de HMR (Reemplazo de módulo en caliente):

watchOptions: {
  poll: true,
  ignored: /node_modules/
}

1
@Lokesh webpack puede ver archivos y recompilarlos cuando cambien. El modo reloj está desactivado de forma predeterminada, por lo watch: trueque también podría funcionar. El sondeo es la verificación continua de otros programas o dispositivos por parte de un programa o dispositivo para ver en qué estado se encuentran, generalmente para ver si todavía están conectados o si quieren comunicarse. Por lo tanto, la configuración poll: truepermite que webpack verifique el estado de su programa para ver si se han realizado cambios, o al menos lo que supongo que está sucediendo.
CoderBriggs

Vinculación de los documentos: la pollopción está definida por watchpack
Matthias

después de cambiar el nombre y reiniciar, esto funcionó para mí (osx). ¡prestigio!
Elad Katz

26

He tenido este problema al trabajar con WebStorm.

Desactivar Configuración -> Configuración del sistema -> "escritura segura" lo resolvió por mí.

Encontré la recomendación para hacerlo en: Solución de problemas de WebPack


1
¡Gracias! ¡Realmente no era obvio que el problema estaba en PhpStorm!
Sergey Zaharchenko

14

Solo para agregar a posibles soluciones: tenía la carpeta de mi proyecto dentro de una carpeta de Dropbox, moverla resolvió el problema por mí. (OS X)


Esto también funcionó para mí; desearía que esta respuesta hubiera estado más cerca de la cima. OS X para mí también (El Capitán).
natchiketa

Esto también solucionó mi problema. ¡Gracias por eso!
Federico

2
¿Sabes por qué está pasando esto? @Les
Ekaitz Hernandez Troyas

10

La distinción entre mayúsculas y minúsculas era mi problema. Mis llamadas de código a require () tenían todos los nombres de ruta en minúsculas, PERO los directorios en realidad tenían una letra mayúscula. Cambié el nombre de todos mis directorios a minúsculas y la visualización de paquetes web funcionó al instante.


Esto no debería ser rechazado, funcionó para mí. Me tomó un tiempo darme cuenta del problema porque mi aplicación todavía se estaba ejecutando correctamente, pero la recarga en vivo tiene que ver con la distinción entre mayúsculas y minúsculas.
skwidbreth

Si está migrando su proyecto de Windows a Mac, eso podría ser un problema real. ¡Gracias!
Eugene Kulabuhov

El mismo problema aqui. Parece que la importación de archivos no es sensible a las mayúsculas y minúsculas, sin embargo, la observación fallará si el nombre de la ruta es exactamente el mismo que el del sistema de archivos
Isaac

9

Un problema es que si los nombres de sus rutas no son absolutos, sucederán cosas como esta. Accidentalmente había configurado resolve.roota en ./lugar de __dirnamey esto me hizo perder mucho tiempo borrando y recreando archivos como los chicos de arriba.


8

Si cambiar fs.inotify.max_user_watches como apunta César todavía no funciona, intente usar el sondeo en lugar de los observadores nativos creando su script como se muestra en los documentos o ejecutando el paquete web con --watch --watch-pollopciones.


8

Tenga en cuenta que si ejecuta el paquete web dentro de una máquina virtual (Vagrant / Virtualbox) y cambia sus archivos en la plataforma de host, es posible que las actualizaciones de archivos en la carpeta compartida no activen inotify en Ubuntu. Eso hará que los cambios no sean recogidos por webpack.

ver: Boleto de Virtualbox # 10660

En mi caso, editar y guardar el archivo en el invitado (en vi) activó el paquete web. Editarlo en el host (en PhpStorm, Bloc de notas o cualquier otra aplicación) NO active el paquete web, sea lo que sea que hice.

Lo resolví usando vagrant-fsnotify .


2
Aunque lo uso vagrant-notify-forwarderpara más recargas mágicas
Manh Tai

vagrant plugin install vagrant-notify-forwarderhizo una solución permanente para mí
4givN

8

Trabaja para mí en Laravel Homestead

--watch --watch-poll

Esto funcionó para mí (en un sistema de archivos no estándar) en Ubuntu
BT

7

Actualizaciones: eliminar todo el directorio y clonar git de nuevo desde el repositorio soluciona mi problema.


2
Pero debe haber una razón para esto
Moe Elsharif

Esta solución también funcionó bien para mí. Parece un bloqueo de recursos. La primera recarga se completó en la salida de la consola, pero bundle.js no se actualizó. En la segunda recarga se atascó en "Comprobación iniciada en un proceso separado ...".
Erik Parso

6

Si está utilizando Vim, debería intentar configurar la copia de seguridad en sí en lugar del automático predeterminado. De lo contrario, Vim a veces cambiará el nombre del archivo original y creará uno nuevo, lo que estropeará el reloj del paquete web:

https://github.com/webpack/webpack/issues/781

Simplemente agregue esto a su configuración de vim si este es el caso:

establecer copia de seguridad = sí


4

Estaba teniendo el mismo problema en un archivo .vue. Cuando el servidor se reinició, todo funcionó bien, pero en el siguiente guardado ya no se volvió a compilar. El problema estaba en la ruta del archivo de importación que tenía una letra en mayúscula. Es muy difícil resolver este problema porque todo funciona en un reinicio del servidor. Compruebe el caso de sus caminos.


3

No se estaba recompilando para mí, pero luego me di cuenta / recordé que el paquete web observa el gráfico de dependencia y no solo una carpeta (o archivos). Efectivamente, los archivos que estaba cambiando aún no formaban parte de ese gráfico.


3

Para mí, el problema fue crear carpetas y archivos en VS Code. Para solucionarlo, volví a clonar mi repositorio y, esta vez, creé nuevas carpetas y archivos a través de la línea de comandos en lugar de Code. Creo que Code estaba corrompiendo los archivos por alguna razón. Vi la aplicación recién actualizada, así que tal vez sea un error nuevo.


2

Tuve un problema similar, ni el paquete web ni el paquete acumulativo en modo reloj detectaron los cambios que hice. Descubrí que era básicamente mi culpa porque estaba cambiando el módulo (archivo .tsx) que aún no se había importado en ninguna parte de la aplicación (por ejemplo, App.ts, que es el punto de entrada) y esperaba que las herramientas de compilación informaran errores. hecho allí.


1
Empiezo a usar ese archivo importándolo donde estaba destinado a ser utilizado.
itumb

¡Agradable señalar! Oh Dios mío, en serio, ¿cómo puedo olvidar esto? Necesito iniciar sesión solo para comentar aquí y decir gracias :)
Lucky Lam

2

La forma en que resolví el problema fue encontrar un error de capitalización en una ruta de importación. La carpeta en el sistema de archivos tenía la primera letra en minúscula, la ruta de importación estaba en mayúsculas. Todo se compiló bien, por lo que esto fue solo un problema de inclusión de reloj de paquete web.


2

También tuve este problema dentro de una VM VirtualBox (5.2.18) Ubuntu (18.04) usando Vagrant (2.1.15) con sincronización rsync. De repente, la primera compilación funciona muy bien, pero Webpack no tiene en cuenta los cambios posteriores, incluso con fs.inotify.max_user_watches=524288set. Añadiendopoll: true configuración de Webpack tampoco ayudó.

Solamente vagrant-notify-forwarder funcionó (vagrant-fsnotify no lo hizo, por alguna razón), pero luego la reconstrucción ocurrió demasiado rápido después de guardar el archivo en el host y supongo que rsync no tuvo suficiente tiempo para terminar su tarea (tal vez debido a la cantidad de directorios sincronizados dentro de mi Vagrantfile?).

Finalmente hice que el reloj funcionara nuevamente aumentando también aggregateTimeouten mi configuración de Webpack:

module.exports = {
  watch: true,
  watchOptions: {
    aggregateTimeout: 10000
  },
  ...
}

Si esta solución funciona para usted, intente reducir este valor nuevamente; de ​​lo contrario, tendrá que esperar 10 segundos hasta que la compilación se reinicie cada vez que presione guardar. El valor predeterminado es 300 ms .


1

Tengo el mismo problema. Y noto que no se está compilando porque mi carpeta contiene algún carácter (*). Y el uso del antiguo complemento de observador parece resolver el problema. Agregue esta línea a su archivo de configuración de paquete web.

plugins: [
    new webpack.OldWatchingPlugin()
  ]

1

Para mí, eliminar node_modulesy hacer npm install o yarn nuevamente para instalar todos los paquetes resolvió el problema


1

¿Cuál fue la causa en mi caso?

Parece que el valor de: max_user_watches en el /proc/sys/fs/inotify/max_user_watches webpack está afectando

Para comprobar su valor real

$cat /proc/sys/fs/inotify/max_user_watches
16384

16384 estaba en mi caso y todavía no era suficiente.

Probé diferentes tipos de soluciones como:

$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Pero parece que incluso si cambiara el valor, cuando reinicié mi PC, volvería al 16384 predeterminado.

SOLUCIÓN si tiene sistema operativo Linux (mi caso, tengo Manjaro):

Crea el archivo:

sudo nano /etc/sysctl.d/90-override.conf

Y poblarlo con:

fs.inotify.max_user_watches=200000

Parece que 200000 es suficiente para mí.

Después de crear el archivo y agregar el valor, simplemente reinicie la PC y debería estar bien.


0

Una solución sencilla en MacOS es la siguiente:

Abra dos ventanas de terminal en el mismo directorio donde reside su proyecto.

En la primera ventana de terminal, ejecute: webpack --watch

En la segunda terminal, ejecute Windows: webpack-dev-server

He probado muchas soluciones posibles y esta parece ser la más confiable.


PD: estoy usando Mac OS Sierra.
skiabox

Estas son dos soluciones completamente diferentes para el mismo problema y probablemente no debería ejecutarlas en paralelo. webpack --watchcompila el proyecto y guarda los archivos en el disco, equivalente a ejecutarse webpackdespués de cada guardado. webpack-dev-serveres una herramienta de desarrollo que se compila en la memoria y sirve el contenido como un servicio a través de http. En cualquier caso, su sugerencia no es una solución, ya que los archivos compilados no se escribirán en el disco mientras webpack --watchno funcione como se anuncia ..
ViggoV

0

Posible solución: cambiar el contexto al directorio de la aplicación.

Tenía todos los archivos de configuración de mi paquete web en una subcarpeta:

components/
webpack/
 development.js
app.js

En webpack/development.js, set context: path.join(__dirname, '../')resolvió mi problema.


0

Después de probar un puñado de estrategias para solucionar este problema, terminé simplemente rindiéndome, pero luego, mientras resolvía otro problema, lo intenté de nuevo y de repente el --watch bandera finalmente estaba funcionando.

Para ser honesto, no sé qué lo hizo funcionar específicamente, pero después de realizar los siguientes pasos, simplemente comenzó a funcionar:

1. Install most recent gcc version
$ sudo port install gcc48
$ sudo port select --set gcc mp-gcc48

2. Install most recent clang version
$ sudo port install clang-3.6
$ sudo port select --set clang mp-clang-3.6

3. Export variables holding the patch to C and C++ compiler
$ export CC=/opt/local/bin/clang
$ export CXX=/opt/local/bin/clang++

Pudo haber sucedido que al instalar estos paquetes alguna dependencia simplemente agregó la pieza faltante del rompecabezas, quién sabe ...

Espero que esto ayude a cualquiera que esté luchando para que funcione.


0

Estoy agregando otra respuesta porque creo que esta es la mejor solución hasta ahora. ¡Lo estoy usando todos los días y es genial! Simplemente instale esta biblioteca:

https://github.com/gajus/write-file-webpack-plugin

Descripción: Obliga al programa webpack-dev-server a escribir archivos de paquete en el sistema de archivos.

Cómo instalar :

npm install write-file-webpack-plugin --save-dev

0

Intenta cambiarte --watcha-d --watch

trabajó para mi


0

Si esto sucedió de repente en su proyecto, entonces podría solucionar el problema.

Tal vez de alguna manera los archivos que estaban rastreando los cambios de su proyecto que busca el paquete web se corrompieron. Puede volver a crearlos con solo seguir unos sencillos pasos.

  1. salga de su proyecto dir. ($: cd ..)
  2. mueva su proyecto a un directorio diferente ($: mv {projectName} {newName})
  3. entrar en el nuevo directorio ($: cd {newName})
  4. inicie el servidor y verifique si se vuelve a cargar con cada cambio de archivo (debería funcionar en la mayoría de los casos, porque ahora el paquete web crea nuevos archivos para observar los cambios)
  5. salir del directorio ($: cd ..)
  6. muévelo de nuevo a su nombre original ($: mv {newName} {projectNam}) Esto funcionó para mí ............

0

Me encontré con esta pregunta cuando tenía un problema similar: parecía que el paquete web no se reagrupaba, incluso cuando se ejecutaba el paquete web --config.

Incluso eliminé bundle.js y la página web todavía se mostraba como antes de mis ediciones.

Para aquellos de ustedes que tienen este mismo problema, finalmente hice la opción 'vaciar caché y recargar duro' en Chrome (haga clic derecho en el botón de recarga con las herramientas de desarrollo abiertas) y eso hizo ese truco


0

Encontré el mismo problema, intenté muchas cosas, finalmente Chrome Clear Browsing Data en Mac funcionó para mí.

Se han instalado estos módulos:

"browser-sync": "^ 2.26.7",

"browser-sync-webpack-plugin": "^ 2.2.2",

"paquete web": "^ 4.41.2",

"webpack-cli": "^ 3.3.9"


0

El problema estaba en la diferenciación entre archivos .js y .ts. Por qué ?

En la construcción del proyecto, Visual Studio compila archivos mecanografiados en .js y .js.map. Esto es totalmente innecesario, porque webpack también maneja archivos mecanografiados (con awesome-typescript-loader). Al editar archivos componet .tsx en Visual Studio Code o con compileOnSave deshabilitado opción en tsconfig.json, el archivo ts editado no se vuelve a compilar y mi paquete web estaba procesando un archivo .js no actual.

La solución fue deshabilitar la compilación de archivos mecanografiados en Visual Studio en la construcción del proyecto. Añadir

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

en PropertyGroup de su .csproj.

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.