webpack --watch tidak mengompilasi file yang diubah

96

Saya mencoba menjalankan webpack --watchdan setelah mengedit file JS saya, itu tidak memicu kompilasi ulang otomatis.

Saya sudah mencoba menginstal ulang webpackmenggunakan npm uninstalltetapi masih tidak berfungsi.

Ada ide?

alcedo.dll
sumber

Jawaban:

72

FYI: tampaknya OS X dapat memiliki folder yang rusak dan tidak lagi mengirim fsevents(yang watchpack/ chokidar/ Finder gunakan) untuk dirinya sendiri dan folder anak apa pun. Saya tidak yakin ini yang terjadi pada Anda, tetapi sangat membuat saya dan rekan kerja frustasi.

Kami dapat mengganti nama folder induk yang rusak dan kemudian menonton acara langsung muncul seperti yang diharapkan. Lihat postingan blog ini untuk info lebih lanjut: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

Perbaikan yang disarankan dari tautan di atas adalah:

  • me-reboot komputer
  • memeriksa disk dan memperbaiki izin melalui Disk Utility
  • menambahkan folder ke daftar privasi Spotlight (daftar folder yang tidak akan diindeks), dan kemudian menghapusnya, secara efektif memaksa pengindeksan ulang
  • mengganti nama folder, dan mungkin mengganti namanya kembali
  • membuat ulang folder dan memindahkan konten lama kembali ke dalamnya

Dua yang pertama tidak berhasil untuk kami, tidak mencoba saran Spotlight, dan pembuatan ulang tidak terbukti perlu.

Kami dapat menemukan folder akar masalah dengan membuka Finder dan membuat file di setiap folder induk berturut-turut hingga salah satunya muncul dengan segera (karena Finder juga akan disemprot oleh bug ini). Folder paling root yang tidak diperbarui adalah pelakunya. Kami tinggal mvmelakukannya dan mvmengembalikannya ke nama aslinya, dan kemudian pengamat bekerja.

Tidak tahu apa yang menyebabkan korupsi, tapi saya senang bisa memperbaikinya.

Ben Mosher
sumber
3
Saya mengganti nama folder ~ / Sites saya menjadi yang lain, dan kemudian kembali ke ~ / Sites dan itu memperbaiki kesalahan. Itu juga telah memperbaiki beberapa kesalahan lain pada proyek lain. Bicara tentang membunuh 2 burung dengan 1 batu. Terima kasih banyak!!!
Kirk
Saya menghadapi masalah ini saat bekerja dengan watchify, tidak ada langkah yang berhasil dengan saya jadi saya akhirnya menggunakan argumen jajak pendapat. Banyak orang yang meneruskan argumen polling ke browserify daripada watchify. Kode saya terlihat seperti:watchify(browserify(config.src,{}), {poll:100});
Ayman
1
Tidak 100% yakin ini alasannya, tetapi mematikan klien sinkronisasi Dropbox saya saat mencoba menjalankan watchify berhasil untuk saya. Baik menjalankan npm installmaupun mengganti nama direktori adalah operasi yang sangat intensif seperti cara klien sinkronisasi diterapkan.
jez
Restart bekerja untuk saya di Linux, saya mengalami masalah ini dengan webpack-dev-server, setelah berjam-jam mencoba mencari tahu mengapa itu berfungsi kemarin tetapi tidak hari ini ...
DomA
1
Mulai 2017, jawaban ini masih menyelamatkan saya dari neraka! Saya pikir konfigurasi webpack saya salah sepanjang waktu!
iamjc015
88

Jika kode Anda tidak dikompilasi ulang, coba tingkatkan jumlah pengamat (di Ubuntu):

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

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

César D. Velandia
sumber
sudo sysctl -ptidak bekerja pada Mavericks. Ada ide baru?
Simon H
Ada masalah saat ini dengan Webpack 3 danModuleConcatenationPlugin . Menghilangkan ModuleConcatenationPluginmemungkinkan menonton untuk melanjutkan.
kross
@SimonH mencoba melihat dan mengubah /etc/sysctl.confsecara langsung? Mengubah resp. menyetel nilai kunci itu? (Jika Anda tidak dapat menemukan perintah untuk menerapkan ad-hoc ( sysctl -p), maka ini adalah satu kali reboot, dan Anda akan baik-baik saja ...)
Frank Nocke
4
Saya sarankan untuk memeriksa jumlah jam tangan sebelumnya, untuk memastikan bahwa itu belum ditambah (memberi Anda gambaran, jika ini bisa menimbulkan masalah): yaitusudo sysctl -a | grep max_user_watches
Frank Nocke
Ini memecahkan masalah saya saat menjalankan chroot (Ubuntu) di Chromebook
Phil D.
40

Menambahkan kode berikut ke file konfigurasi webpack saya memperbaiki masalah untuk saya, semoga ini membantu. Jangan lupa untuk mengabaikan folder node_modules Anda, karena itu akan mematikan kinerja untuk HMR (Penggantian Modul Panas):

watchOptions: {
  poll: true,
  ignored: /node_modules/
}
CoderBriggs
sumber
1
@Lokesh webpack dapat melihat file dan mengkompilasi ulang setiap kali mereka berubah. Mode jam tangan dinonaktifkan secara default sehingga watch: truemungkin berfungsi juga. Polling adalah pemeriksaan terus menerus terhadap program atau perangkat lain oleh satu program atau perangkat untuk melihat statusnya, biasanya untuk melihat apakah mereka masih terhubung atau ingin berkomunikasi. Jadi pengaturan poll: truememungkinkan webpack untuk memeriksa status program Anda untuk melihat apakah ada perubahan yang telah dilakukan, atau setidaknya apa yang saya asumsikan sedang terjadi.
CoderBriggs
Menautkan dokumen: pollOpsi ditentukan oleh watchpack
Matthias
setelah mengganti nama dan me-reboot, ini melakukan trik untuk saya (osx). pujian!
Elad Katz
26

Saya mengalami masalah ini saat bekerja dengan WebStorm.

Menonaktifkan Pengaturan -> Pengaturan Sistem -> "tulis aman" menyelesaikannya untuk saya.

Temukan rekomendasi untuk melakukannya di: Pemecahan Masalah WebPack

Chris
sumber
1
Terima kasih! Itu benar-benar tidak jelas bahwa masalahnya ada di PhpStorm!
Sergey Zaharchenko
14

Hanya untuk menambahkan solusi yang mungkin: Saya memiliki folder proyek saya di dalam folder Dropbox, memindahkannya menyelesaikan masalah bagi saya. (OS X)

Les
sumber
Ini berhasil untuk saya juga — saya berharap jawaban ini lebih dekat ke atas. OS X untuk saya juga (El Capitan).
natchiketa
Ini memperbaiki masalah saya juga. Terima kasih untuk itu!
Federico
2
Tahukah Anda mengapa terjadi ini? @Les
Ekaitz Hernandez Troyas
10

Kepekaan huruf besar / kecil folder adalah masalah saya. Kode saya memanggil ke require () memiliki semua nama jalur huruf kecil TETAPI sebenarnya direktori memiliki huruf besar di dalamnya. Saya mengganti nama semua direktori saya menjadi huruf kecil dan menonton webpack bekerja secara instan.

Acker Apple
sumber
Ini tidak boleh diremehkan, itu berhasil untuk saya. Butuh beberapa saat bagi saya untuk menyadari masalahnya karena aplikasi saya masih berjalan dengan benar, tetapi pemuatan ulang langsung khusus tentang sensitivitas huruf.
skwidbreth
Jika Anda memigrasi proyek Anda dari Windows ke Mac, itu mungkin menjadi masalah nyata. Terima kasih!
Eugene Kulabuhov
Masalah yang sama disini. Tampaknya mengimpor file tidak peka terhadap huruf besar / kecil, namun menonton akan gagal jika nama path persis sama dengan sistem file
Isaac
9

Satu masalah adalah jika nama jalur Anda tidak mutlak maka hal seperti ini akan terjadi. Saya tidak sengaja menyetel resolve.rootke ./alih-alih __dirnamedan ini menyebabkan saya membuang banyak waktu untuk menghapus dan membuat ulang file seperti orang-orang di atas saya.

Liam Horne
sumber
8

Jika mengubah fs.inotify.max_user_watches seperti yang ditunjukkan oleh César masih tidak berhasil, coba gunakan polling daripada pengamat asli dengan membuat skrip Anda seperti yang ditunjukkan dalam dokumen atau menjalankan webpack dengan --watch --watch-pollopsi.

Angelo Selvini
sumber
8

Perhatikan bahwa jika Anda menjalankan webpack dalam mesin virtual (Vagrant / Virtualbox) dan Anda mengubah file Anda di platform host, pembaruan file di folder bersama mungkin tidak memicu inotify di Ubuntu. Itu akan menyebabkan perubahan tidak diambil oleh webpack.

lihat: tiket Virtualbox # 10660

Dalam kasus saya, mengedit dan menyimpan file di de guest (in vi) memang memicu webpack. Mengeditnya di host (di PhpStorm, Notepad atau aplikasi lain) TIDAK memicu webpack apa pun yang saya lakukan.

Saya menyelesaikannya dengan menggunakan vagrant-fsnotify .

mk8374876
sumber
2
Meskipun saya menggunakan vagrant-notify-forwarderlebih banyak magic reload
Manh Tai
vagrant plugin install vagrant-notify-forwardermembuat solusi permanen untuk saya
4givN
8

Bekerja untuk saya di Laravel Homestead

--watch --watch-poll
Alberto Oliveira
sumber
Ini bekerja untuk saya (dalam sistem file tidak standar) di Ubuntu
BT
7

Pembaruan: menghapus seluruh direktori dan kloning git lagi dari repo memperbaiki masalah saya.

alcedo.dll
sumber
2
Tetapi pasti ada alasan untuk ini
Moe Elsharif
Solusi ini bekerja dengan baik juga untuk saya. Sepertinya ada pemblokiran sumber daya. Pemuatan ulang pertama selesai di keluaran konsol, tetapi bundle.js tidak diperbarui. Saat dimuat ulang kedua, aplikasi macet di "Pemeriksaan dimulai dalam proses terpisah ...".
Erik Parso
6

Jika Anda menggunakan Vim, Anda harus mencoba mengatur backupcopy ke yes daripada default auto. Jika tidak, Vim terkadang akan mengganti nama file asli dan membuat yang baru, yang akan mengacaukan jam webpack:

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

Cukup tambahkan ini ke pengaturan vim Anda jika ini masalahnya:

set backupcopy = yes

Rosenfeld
sumber
4

Saya mengalami masalah yang sama pada file .vue. Ketika server dimulai ulang semuanya berfungsi dengan baik, tetapi pada penyimpanan berikutnya tidak dikompilasi ulang lagi. Masalahnya ada pada jalur file impor yang memiliki satu huruf kapital. Sangat sulit untuk memahami masalah ini karena semuanya bekerja pada reboot server. Periksa kasus jalur Anda.

Paulo Bruckmann
sumber
4

Itu tidak mengkompilasi ulang untuk saya tetapi kemudian saya menyadari / ingat bahwa webpack melihat grafik ketergantungan dan bukan hanya folder (atau file). Benar saja, file yang saya ubah belum menjadi bagian dari grafik itu.

Mike Cheel
sumber
3

Bagi saya, membuat folder dan file di VS Code adalah masalahnya. Untuk memperbaikinya, saya mengkloning ulang repo saya dan kali ini, membuat folder dan file baru melalui baris perintah alih-alih Kode. Saya pikir Kode merusak file karena alasan tertentu. Saya melihat aplikasinya baru saja diperbarui jadi mungkin ini bug baru.

lisafrench.dll
sumber
2

Saya memiliki masalah serupa, baik webpack atau rollup dalam mode jam tangan tidak menangkap perubahan yang saya buat. Saya menemukan bahwa pada dasarnya itu adalah kesalahan saya ketika saya mengubah modul (file .tsx) yang belum diimpor di mana pun dalam aplikasi (misalnya App.ts yang merupakan titik masuk) dan saya mengharapkan alat build untuk melaporkan kesalahan saya dibuat di sana.

itumb
sumber
1
Saya mulai menggunakan file itu dengan mengimpornya di tempat yang dimaksudkan untuk digunakan.
itumb
Poin bagus! oh astaga seperti serius bagaimana saya bisa melupakan ini. Saya perlu masuk hanya untuk berkomentar di sini untuk mengucapkan terima kasih :)
Lucky Lam
2

Cara saya menyelesaikan masalah adalah menemukan kesalahan kapitalisasi di jalur impor. Folder pada sistem file memiliki huruf kecil pertama, jalur impor adalah huruf besar. Semuanya dikompilasi dengan baik, jadi ini hanya masalah jam tangan webpack.

AotearoaCoder
sumber
2

Juga memiliki masalah ini di dalam VM VirtualBox (5.2.18) Ubuntu (18.04) menggunakan Vagrant (2.1.15) dengan sinkronisasi rsync. Tiba-tiba, build pertama berjalan dengan baik tetapi Webpack tidak mempertimbangkan perubahan setelahnya, bahkan denganfs.inotify.max_user_watches=524288 set. Menambahkanpoll: true konfigurasi Webpack juga tidak membantu.

Hanya vagrant-notify-forwarder berfungsi (vagrant-fsnotify tidak, untuk beberapa alasan), tetapi kemudian pembangunan kembali terjadi terlalu cepat setelah menyimpan file di host dan saya kira rsync tidak memiliki cukup waktu untuk menyelesaikan tugasnya (mungkin karena jumlahnya direktori yang disinkronkan di dalam Vagrantfile saya?).

Akhirnya saya membuat jam tangan berfungsi lagi dengan juga meningkatkan aggregateTimeoutkonfigurasi di Webpack saya:

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

Jika solusi ini berhasil untuk Anda, coba turunkan nilai ini lagi, jika tidak, Anda harus menunggu 10 detik hingga build dimulai ulang setiap kali Anda menekan simpan. Nilai defaultnya adalah 300 ms .

Benoît Vogel
sumber
2

Apa penyebab dalam kasus saya:

Tampaknya nilai: max_user_watches in the /proc/sys/fs/inotify/max_user_watches mempengaruhi webpack

Untuk memeriksa nilai Anda yang sebenarnya

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

16384 dalam kasus saya dan itu masih belum cukup.

Saya mencoba berbagai jenis solusi seperti:

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

Tetapi tampaknya meskipun saya mengubah nilainya, ketika saya me-restart PC saya, itu akan kembali ke default yang 16384.

SOLUSI jika Anda memiliki OS Linux (kasus saya, saya punya Manjaro):

Buat file:

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

Dan isi dengan:

fs.inotify.max_user_watches=200000

Sepertinya 200000 sudah cukup bagi saya.

Setelah Anda membuat file dan menambahkan nilainya, cukup restart PC dan Anda akan baik-baik saja.

Alban Kaperi
sumber
1

Saya memiliki masalah yang sama. Dan saya perhatikan itu tidak dikompilasi karena folder saya berisi beberapa karakter (*). Dan menggunakan plugin pengamat lama tampaknya menyelesaikan masalah. Tambahkan baris ini ke file konfigurasi webpack Anda.

plugins: [
    new webpack.OldWatchingPlugin()
  ]
tikar
sumber
1

Bagi saya menghapus node_modulesdan melakukan npm install atau benang lagi untuk menginstal semua paket memecahkan masalah

Moe Elsharif
sumber
0

Solusi mudah di MacOS adalah sebagai berikut:

Buka dua jendela terminal di direktori yang sama dengan proyek Anda.

Di jendela terminal pertama, jalankan: webpack --watch

Di jendela terminal kedua jalankan: webpack-dev-server

Saya telah mencoba banyak solusi yang mungkin dan ini tampaknya yang paling dapat diandalkan

skiabox
sumber
PS: Saya menggunakan Mac OS Sierra.
skiabox
Ini adalah dua solusi yang sangat berbeda untuk masalah yang sama dan Anda mungkin tidak boleh menjalankannya secara paralel. webpack --watchmengkompilasi proyek dan menyimpan file ke disk, setara dengan menjalankan webpacksetiap penyimpanan. webpack-dev-serveradalah alat pengembangan yang mengkompilasi ke memori dan menyajikan konten sebagai layanan melalui http. Bagaimanapun, saran Anda bukanlah solusi, karena file yang dikompilasi tidak akan ditulis ke disk selama webpack --watchtidak berfungsi seperti yang diiklankan ..
ViggoV
0

Solusi yang memungkinkan: mengubah konteks ke direktori aplikasi.

Saya memiliki semua file konfigurasi webpack saya di sub folder:

components/
webpack/
 development.js
app.js

Dalam webpack/development.js, set context: path.join(__dirname, '../')memecahkan masalah saya.

wwayne
sumber
0

Setelah mencoba beberapa strategi untuk memperbaiki masalah ini, saya akhirnya menyerah, tetapi ketika menyelesaikan masalah lain saya mencoba lagi dan tiba-tiba --watchbendera itu akhirnya berfungsi.

Sejujurnya saya tidak tahu apa yang secara khusus membuatnya berfungsi tetapi setelah melakukan langkah-langkah berikut ini baru mulai berfungsi:

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++

Mungkin saja terjadi ketika menginstal paket-paket ini beberapa ketergantungan baru saja menambahkan potongan teka-teki yang hilang, siapa tahu ...

Semoga ini membantu siapa pun yang berjuang di luar sana untuk membuatnya bekerja.

utxeee
sumber
0

Saya menambahkan jawaban lain karena saya yakin ini adalah solusi terbaik sejauh ini. Saya menggunakannya setiap hari dan itu keren! Instal saja perpustakaan ini:

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

Deskripsi: Memaksa program webpack-dev-server untuk menulis file bundel ke sistem file.

Bagaimana cara meng-install :

npm install write-file-webpack-plugin --save-dev
skiabox
sumber
0

Coba ganti --watchke-d --watch

bekerja untuk saya

Adrin
sumber
0

Jika ini terjadi secara tiba-tiba dalam proyek Anda, ini dapat memperbaiki masalahnya.

Mungkin entah bagaimana file yang melacak proyek Anda berubah yang dicari webpack rusak. Anda dapat membuatnya lagi hanya dengan mengikuti langkah-langkah sederhana.

  1. keluar dari direktori proyek Anda. ($: cd ..)
  2. pindahkan proyek Anda ke direktori lain ($: mv {projectName} {newName})
  3. buka direktori baru ($: cd {newName})
  4. mulai server dan periksa apakah itu memuat ulang pada setiap perubahan file (seharusnya berfungsi dalam banyak kasus, karena sekarang webpack membuat file baru untuk mengawasi perubahan)
  5. keluar dari direktori ($: cd ..)
  6. pindahkan kembali ke nama aslinya ($: mv {newName} {projectNam}) Ini berhasil untuk saya ............
Mohammed Shoeb
sumber
0

Saya menemukan pertanyaan ini ketika saya mengalami masalah yang sama-- tampaknya webpack tidak melakukan rebundling, bahkan ketika menjalankan webpack --config.

Saya bahkan menghapus bundle.js dan halaman web masih ditampilkan seperti sebelum pengeditan saya.

Bagi Anda yang mendapatkan masalah yang sama, akhirnya saya melakukan opsi 'cache kosong dan muat ulang' di chrome (klik kanan tombol muat ulang dengan devtools terbuka) dan itu berhasil.

Steven Anderson
sumber
0

Saya menemui masalah yang sama, mencoba banyak hal, akhirnya Chrome Hapus Data Penjelajahan di Mac berfungsi untuk saya.

Modul ini telah dipasang:

"browser-sync": "^ 2.26.7",

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

"webpack": "^ 4.41.2",

"webpack-cli": "^ 3.3.9"

Mahdiyeh
sumber
0

Masalah ada dalam perbedaan antara file .js dan .ts. Kenapa?

Pada pembuatan proyek, Visual Studio mengompilasi file skrip menjadi .js dan .js.map. Ini sama sekali tidak diperlukan, karena webpack menangani file skrip juga (dengan awesome-typescript-loader). Saat mengedit file compileOnSave dalam kode Visual Studio atau dengan compileOnSave opsi di tsconfig.json, file ts yang diedit tidak dikompilasi ulang dan webpack saya sedang memproses file .js yang tidak sebenarnya.

Solusinya adalah menonaktifkan kompilasi file skrip di studio visual pada pembangunan proyek. Menambahkan

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

di PropertyGroup dari .csproj Anda.

Erik Parso
sumber