webpack --watch không biên dịch các tệp đã thay đổi


95

Tôi đã thử chạy webpack --watchvà sau khi chỉnh sửa các tệp JS của mình, nó không kích hoạt tự động biên dịch lại.

Tôi đã thử cài đặt lại webpackbằng cách sử dụng npm uninstallnhưng nó vẫn không hoạt động.

Bất kỳ ý tưởng?

Câu trả lời:


72

FYI: có vẻ như OS X có thể có một thư mục bị hỏng và không còn gửi fsevents(mà watchpack/ chokidar/ Finder sử dụng) cho chính nó và bất kỳ thư mục con nào. Tôi không thể chắc chắn đây là điều gì đã xảy ra với bạn, nhưng tôi và một đồng nghiệp đã rất bực bội.

Chúng tôi có thể đổi tên thư mục mẹ bị hỏng và sau đó xem các sự kiện ngay lập tức diễn ra như mong đợi. Xem bài đăng trên blog này để biết thêm thông tin: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

Các bản sửa lỗi được đề xuất từ ​​liên kết trên là:

  • khởi động lại máy tính
  • kiểm tra đĩa và sửa quyền thông qua Disk Utility
  • thêm thư mục vào danh sách quyền riêng tư Spotlight (danh sách các thư mục không được lập chỉ mục), rồi xóa khỏi nó, buộc lập chỉ mục lại một cách hiệu quả
  • đổi tên thư mục và sau đó có thể đổi tên lại
  • tạo lại thư mục và di chuyển nội dung cũ trở lại nó

Hai lần đầu tiên không hiệu quả với chúng tôi, không thử đề xuất Spotlight và việc tạo lại không được chứng minh là cần thiết.

Chúng tôi có thể tìm thấy thư mục có vấn đề gốc bằng cách mở Finder và tạo các tệp trong từng thư mục mẹ kế tiếp cho đến khi một thư mục xuất hiện ngay lập tức (vì Finder cũng sẽ bị lỗi này). Thư mục root-most không cập nhật là thủ phạm. Chúng tôi chỉ cần mv'd nó và mv' nó trở lại tên ban đầu của nó, và sau đó trình theo dõi đã hoạt động.

Không biết điều gì gây ra tham nhũng, nhưng tôi rất vui khi có cách sửa chữa.


3
Tôi đã đổi tên thư mục ~ / Sites của mình thành một thư mục khác, sau đó quay lại ~ / Sites và nó đã sửa được lỗi. Nó cũng đã sửa một số lỗi khác trên các dự án khác. Nói về việc giết 2 con chim bằng 1 viên đá. Cảm ơn bạn rất nhiều!!!
Kirk

Tôi đã đối mặt với vấn đề này trong khi làm việc watchify, không có bước nào phù hợp với tôi vì vậy tôi đã kết thúc bằng cách sử dụng thăm dò ý kiến. Rất nhiều người đang thông qua lập luận của cuộc thăm dò để duyệt qua thay vì lưu trữ. Mã của tôi trông như sau:watchify(browserify(config.src,{}), {poll:100});
Ayman

1
Không chắc chắn 100% đây là lý do, nhưng tắt ứng dụng đồng bộ hóa Dropbox của tôi trong khi cố gắng chạy watchify đã làm việc cho tôi. Cả việc chạy npm installcũng như đổi tên một thư mục đều là những hoạt động rất chuyên sâu theo cách mà ứng dụng khách đồng bộ được thực hiện.
jez

Khởi động lại làm việc với tôi trên Linux, tôi gặp sự cố này với webpack-dev-server, sau nhiều giờ cố gắng tìm ra lý do tại sao nó hoạt động ngày hôm qua nhưng không phải hôm nay ...
DomA

1
Từ năm 2017, câu trả lời này vẫn cứu tôi khỏi địa ngục! Tôi nghĩ rằng cấu hình webpack của tôi là sai mọi lúc!
iamjc015,

88

Nếu mã của bạn không được biên dịch lại, hãy thử tăng số lượng người theo dõi (trong Ubuntu):

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

Nguồn: https://webpack.github.io/docs/troubleshooting.html


sudo sysctl -pkhông hoạt động trên Mavericks. Bất kỳ ý tưởng mới?
Simon H

Có sự cố hiện tại với Webpack 3 vàModuleConcatenationPlugin . Bỏ qua ModuleConcatenationPlugincho phép xem tiếp tục.
kross

@SimonH đã thử xem và thay đổi /etc/sysctl.conftrực tiếp chưa? Thay đổi tương ứng. thiết lập khóa-giá trị đó? (Nếu bạn không thể tìm thấy lệnh để áp dụng ad-hoc ( sysctl -p), cũng sau đó nó khởi động lại duy nhất, và bạn sẽ được tốt ...)
Frank Nocke

4
Tôi khuyên bạn nên kiểm tra số lượng đồng hồ trước đó, để đảm bảo rằng nó đã không được tăng (tạo cho bạn một ý tưởng, nếu điều này có thể ge vấn đề): tứcsudo sysctl -a | grep max_user_watches
Frank Nocke

Điều này đã giải quyết được sự cố của tôi khi chạy chroot (Ubuntu) trên Chromebook
Phil D.

40

Việc thêm mã sau vào tệp cấu hình webpack của tôi đã khắc phục được sự cố cho tôi, hy vọng điều này sẽ hữu ích. Đừng quên bỏ qua thư mục node_modules của bạn, vì điều đó sẽ giết chết hiệu suất cho HMR (Thay thế mô-đun nóng):

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

1
@Lokesh webpack có thể xem tệp và biên dịch lại bất cứ khi nào chúng thay đổi. Chế độ xem được tắt theo mặc định nên cũng watch: truecó thể hoạt động. Thăm dò ý kiến ​​là việc một chương trình hoặc thiết bị kiểm tra liên tục các chương trình hoặc thiết bị khác để xem chúng đang ở trạng thái nào, thường là để xem chúng còn được kết nối hay muốn giao tiếp. Vì vậy, cài đặt poll: truecho phép webpack kiểm tra trạng thái chương trình của bạn để xem liệu có thay đổi nào được thực hiện hay không, hoặc ít nhất là điều tôi cho là đang xảy ra.
CoderBriggs

Liên kết các tài liệu: Các polltùy chọn được định nghĩa bởi watchpack
Matthias

sau khi đổi tên và khởi động lại, điều này đã thực hiện thủ thuật đối với tôi (osx). thanh danh!
Elad Katz

26

Tôi đã gặp sự cố này khi làm việc với WebStorm.

Vô hiệu hóa Cài đặt -> Cài đặt Hệ thống -> "ghi an toàn" đã giải quyết nó cho tôi.

Tìm thấy khuyến nghị làm như vậy trong: Khắc phục sự cố WebPack


1
Cảm ơn! Nó thực sự không rõ ràng rằng vấn đề là trong PhpStorm!
Sergey Zaharchenko

14

Chỉ để thêm vào các giải pháp khả thi: Tôi có thư mục dự án của mình bên trong thư mục Dropbox, việc di chuyển nó ra ngoài đã giải quyết được vấn đề cho tôi. (OS X)


Điều này cũng hiệu quả với tôi — tôi ước câu trả lời này gần với phần đầu hơn. OS X cho tôi cũng vậy (El Capitan).
natchiketa

Điều này cũng đã khắc phục sự cố của tôi. Cảm ơn vì điều đó!
Federico

2
Bạn có biết tại sao lại xảy ra điều này không? @Les
Ekaitz Hernandez Troyas

10

Sự phân biệt chữ hoa chữ thường trong thư mục là vấn đề của tôi. Các lệnh gọi mã của tôi đến request () có tất cả các tên đường dẫn chữ thường NHƯNG các thư mục thực sự có chữ hoa trong chúng. Tôi đã đổi tên tất cả các thư mục của mình thành chữ thường và việc xem webpack hoạt động ngay lập tức.


Điều này không nên bị phản đối, nó hiệu quả với tôi. Tôi đã mất một lúc để nhận ra vấn đề vì ứng dụng của tôi vẫn chạy chính xác, nhưng tải lại trực tiếp đặc biệt về phân biệt chữ hoa chữ thường.
skwidbreth

Nếu bạn đang di chuyển dự án của mình từ Windows sang Mac, đó có thể là một vấn đề thực sự. Cảm ơn!
Eugene Kulabuhov

Cùng một vấn đề ở đây. Có vẻ như việc nhập tệp không phân biệt chữ hoa chữ thường, tuy nhiên việc xem sẽ không thành công nếu tên đường dẫn chính xác giống với hệ thống tệp
Isaac

9

Một vấn đề là nếu tên đường dẫn của bạn không phải là tuyệt đối thì những điều như thế này sẽ xảy ra. Tôi đã vô tình đặt resolve.rootthành ./thay vì __dirnamevà điều này khiến tôi mất rất nhiều thời gian để xóa và tạo lại các tệp như những người ở trên tôi.


8

Nếu việc thay đổi fs.inotify.max_user_watches như được César chỉ ra vẫn không hiệu quả, hãy thử sử dụng tính năng thăm dò thay vì người theo dõi gốc bằng cách tạo tập lệnh của bạn như được hiển thị trong tài liệu hoặc chạy webpack với --watch --watch-pollcác tùy chọn.


8

Lưu ý rằng nếu bạn chạy webpack trong một máy ảo (Vagrant / Virtualbox) và bạn thay đổi tệp của mình trên nền tảng máy chủ, các cập nhật tệp trong thư mục chia sẻ có thể không kích hoạt thông báo trên Ubuntu. Điều đó sẽ làm cho các thay đổi không được webpack tiếp nhận.

xem: Virtualbox ticket # 10660

Trong trường hợp của tôi, việc chỉnh sửa và lưu tệp trên de guest (in vi) đã kích hoạt webpack. Chỉnh sửa nó trên máy chủ (trong PhpStorm, Notepad hoặc bất kỳ ứng dụng nào khác) sẽ KHÔNG kích hoạt gói web bất cứ điều gì tôi đã làm.

Tôi đã giải quyết nó bằng cách sử dụng vagrant-fsnotify .


2
Mặc dù tôi sử dụng vagrant-notify-forwarderđể tải lại ma thuật nhiều hơn
Manh Tai

vagrant plugin install vagrant-notify-forwarderđã đưa ra một giải pháp lâu dài cho tôi
4givN

8

Làm việc cho tôi ở Laravel Homestead

--watch --watch-poll

Điều này đã làm việc cho tôi (trong một hệ thống tệp không chuẩn) trong Ubuntu
BT

7

Cập nhật: xóa toàn bộ thư mục và sao chép git sau đó từ repo khắc phục sự cố của tôi.


2
Nhưng phải có lý do cho điều này
Moe Elsharif. 27/02/18

Giải pháp này cũng hoạt động tốt đối với tôi. Có vẻ như một số tài nguyên bị chặn. Tải lại lần đầu tiên đã được hoàn tất trong đầu ra bảng điều khiển, nhưng bó.js chưa được cập nhật. Vào lần tải lại thứ hai, nó bị kẹt ở "Quá trình kiểm tra đã bắt đầu trong một quy trình riêng ...".
Erik Parso

6

Nếu bạn đang sử dụng Vim, bạn nên thử đặt backupcopy thành yes thay vì auto mặc định. Nếu không, Vim đôi khi sẽ đổi tên tệp gốc và tạo một tệp mới, điều này sẽ gây rối với đồng hồ webpack:

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

Chỉ cần thêm điều này vào cài đặt vim của bạn nếu đây là trường hợp:

đặt backupcopy = yes


4

Tôi đang gặp sự cố tương tự trên tệp .vue. Khi máy chủ khởi động lại, tất cả đều hoạt động tốt, nhưng trong lần lưu tiếp theo, nó không được biên dịch lại nữa. Vấn đề là trên đường dẫn tệp nhập có một chữ cái được viết hoa. Rất khó để tìm ra vấn đề này vì mọi thứ hoạt động khi máy chủ khởi động lại. Kiểm tra trường hợp của các đường dẫn của bạn.


3

Nó không phải là biên dịch lại cho tôi nhưng sau đó tôi nhận ra / nhớ rằng webpack xem biểu đồ phụ thuộc chứ không chỉ một thư mục (hoặc các tệp). Chắc chắn rằng các tệp tôi đang thay đổi chưa phải là một phần của biểu đồ đó.


3

Đối với tôi, việc tạo các thư mục và tệp trong VS Code là một vấn đề. Để khắc phục, tôi đã nhân bản lại repo của mình và lần này, tạo các thư mục và tệp mới thông qua dòng lệnh thay vì Mã. Tôi nghĩ rằng Mã đã làm hỏng các tệp vì một số lý do. Tôi thấy ứng dụng vừa được cập nhật nên có thể đó là một lỗi mới.


2

Tôi đã gặp vấn đề tương tự, cả gói web hoặc cuộn lên trong kho chế độ xem đều không bắt được những thay đổi tôi đã thực hiện. Tôi phát hiện ra rằng về cơ bản đó là lỗi của tôi khi tôi đang thay đổi mô-đun (tệp .tsx) chưa được nhập vào bất kỳ đâu trong ứng dụng (ví dụ: App.ts là điểm nhập) và tôi đang mong đợi các công cụ xây dựng thông báo lỗi. được thực hiện ở đó.


1
Tôi bắt đầu sử dụng tệp đó bằng cách nhập tệp đó vào nơi dự định sử dụng.
itumb

Tốt chỉ ra! oh gosh như nghiêm túc làm sao tôi có thể quên điều này. Tôi cần đăng nhập chỉ để bình luận ở đây để nói lời cảm ơn :)
Lucky Lam

2

Cách tôi giải quyết vấn đề là tìm lỗi viết hoa trong đường dẫn nhập. Thư mục trên hệ thống tệp có chữ cái đầu tiên viết thường, đường dẫn nhập là chữ hoa. Mọi thứ được biên dịch tốt, vì vậy đây chỉ là một vấn đề bao gồm đồng hồ webpack.


2

Cũng có vấn đề này trong máy ảo VirtualBox (5.2.18) Ubuntu (18.04) sử dụng Vagrant (2.1.15) với đồng bộ hóa rsync. Đột nhiên, bản dựng đầu tiên chạy rất tốt nhưng Webpack không xem xét các thay đổi sau đó, ngay cả với fs.inotify.max_user_watches=524288bộ. Thêm poll: truevào cấu hình Webpack cũng không giúp được gì.

Chỉ vagrant-notify-forwarderhoạt động (vì lý do nào đó không có vagrant-fsnotify), nhưng sau đó quá trình xây dựng lại diễn ra quá nhanh sau khi lưu tệp trên máy chủ và tôi cho rằng rsync không có đủ thời gian để hoàn thành nhiệm vụ của nó (có thể do lượng thư mục được đồng bộ hóa bên trong Vagrantfile của tôi?).

Cuối cùng, tôi đã làm cho đồng hồ hoạt động trở lại bằng cách tăng aggregateTimeoutcấu hình Webpack của tôi:

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

Nếu giải pháp này phù hợp với bạn, hãy thử giảm giá trị này một lần nữa, nếu không, bạn sẽ phải đợi 10 giây cho đến khi bản dựng khởi động lại mỗi khi bạn nhấn lưu. Giá trị mặc định là 300 ms .


1

Tôi có cùng một vấn đề. Và tôi nhận thấy nó không biên dịch vì thư mục của tôi chứa một số ký tự (*). Và việc sử dụng plugin watcher cũ dường như giải quyết được vấn đề. Thêm dòng này vào tệp cấu hình gói web của bạn.

plugins: [
    new webpack.OldWatchingPlugin()
  ]

1

Đối với tôi, việc xóa node_modulesvà thực hiện cài đặt npm hoặc cài đặt lại sợi để cài đặt tất cả các gói đã giải quyết được vấn đề


1

Nguyên nhân trong trường hợp của tôi là gì:

Có vẻ như giá trị của: max_user_watches trong/proc/sys/fs/inotify/max_user_watches đang ảnh hưởng đến webpack

Để kiểm tra giá trị thực của bạn

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

16384 là trong trường hợp của tôi và nó vẫn chưa đủ.

Tôi đã thử các loại giải pháp khác nhau như:

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

Nhưng có vẻ như ngay cả khi tôi đã thay đổi giá trị, khi tôi khởi động lại PC của mình, nó sẽ trở lại mặc định là 16384.

GIẢI PHÁP nếu bạn có Hệ điều hành Linux (trường hợp của tôi, tôi có Manjaro):

Tạo tệp:

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

Và điền nó với:

fs.inotify.max_user_watches=200000

Có vẻ như 200000 là đủ đối với tôi.

Sau khi bạn tạo tệp và thêm giá trị, chỉ cần khởi động lại PC và bạn sẽ ổn.


0

Một giải pháp dễ dàng trên MacOS là:

Mở hai cửa sổ đầu cuối trong cùng một thư mục chứa dự án của bạn.

Trong cửa sổ đầu tiên chạy: webpack --watch

Trong cửa sổ đầu cuối thứ hai chạy: webpack-dev-server

Tôi đã thử nhiều giải pháp khả thi và đây có vẻ là giải pháp đáng tin cậy nhất


Tái bút: Tôi đang sử dụng Mac OS Sierra.
skiabox

Đây là hai giải pháp hoàn toàn khác nhau cho cùng một vấn đề và bạn có thể không nên chạy chúng song song. webpack --watchbiên dịch dự án và lưu các tệp vào đĩa, tương đương với việc chạy webpacksau mỗi lần lưu. webpack-dev-serverlà một công cụ phát triển biên dịch vào bộ nhớ và cung cấp nội dung như một dịch vụ qua http. Trong mọi trường hợp đề nghị của bạn không phải là một giải pháp, vì các tập tin biên soạn sẽ không được ghi vào đĩa miễn là webpack --watchkhông làm việc như đã quảng cáo ..
ViggoV

0

Giải pháp khả thi: thay đổi ngữ cảnh sang thư mục ứng dụng.

Tôi đã có tất cả các tệp cấu hình gói web của mình trong một thư mục con:

components/
webpack/
 development.js
app.js

Trong webpack/development.js, thiết lập đã context: path.join(__dirname, '../')giải quyết vấn đề của tôi.


0

Sau khi thử một số chiến lược để khắc phục sự cố này, tôi đã bỏ cuộc nhưng sau đó trong khi giải quyết một vấn đề khác, tôi đã thử lại và đột nhiên --watch lá cờ cuối cùng cũng hoạt động.

Thành thật mà nói, tôi không biết điều gì đã làm cho nó hoạt động cụ thể nhưng sau khi thực hiện các bước sau, nó mới bắt đầu hoạt động:

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

Có thể đã xảy ra rằng trong khi cài đặt các gói này, một số phụ thuộc chỉ thêm phần còn thiếu của câu đố, ai biết được ...

Hy vọng điều này sẽ giúp bất cứ ai đang gặp khó khăn ngoài kia để làm cho nó hoạt động.


0

Tôi đang thêm một câu trả lời khác vì tôi tin rằng đây là giải pháp tốt nhất cho đến nay. Tôi đang sử dụng nó hàng ngày và nó thật tuyệt! Chỉ cần cài đặt thư viện này:

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

Mô tả: Buộc chương trình webpack-dev-server ghi các tệp gói vào hệ thống tệp.

Cài đặt thế nào :

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

0

Hãy thử thay đổi --watchthành-d --watch

đã làm cho tôi


0

Nếu điều này xảy ra đột ngột trong dự án của bạn, thì điều này có thể khắc phục sự cố.

Có thể bằng cách nào đó, các tệp theo dõi các thay đổi trong dự án của bạn mà webpack tìm kiếm đã bị hỏng. Bạn có thể tạo lại chúng chỉ bằng cách làm theo các bước đơn giản.

  1. ra khỏi dự án của bạn. ($: cd ..)
  2. di chuyển dự án của bạn sang thư mục khác ($: mv {projectName} {newName})
  3. đi vào dir mới ($: cd {newName})
  4. khởi động máy chủ và kiểm tra xem nó có tải lại sau mỗi lần thay đổi tệp hay không (nó sẽ hoạt động trong hầu hết các trường hợp, vì bây giờ webpack tạo tệp mới để theo dõi các thay đổi)
  5. ra khỏi dir ($: cd ..)
  6. chuyển nó trở lại tên ban đầu ($: mv {newName} {projectNam}) Điều này đã làm việc cho tôi ............

0

Tôi đã gặp câu hỏi này khi gặp sự cố tương tự - có vẻ như webpack không hoàn lại tiền, ngay cả khi chạy webpack --config.

Tôi thậm chí đã xóa gói.js và trang web vẫn hiển thị như trước khi tôi chỉnh sửa.

Đối với những người gặp phải vấn đề tương tự, cuối cùng tôi đã thực hiện tùy chọn 'trống bộ nhớ cache và tải lại cứng' trong chrome (nhấp chuột phải vào nút tải lại khi các devtools đang mở) và điều đó đã thực hiện được thủ thuật đó


0

Tôi đã gặp vấn đề tương tự, đã thử nhiều cách, cuối cùng, Chrome Clear Browsing Data trên Mac đã làm việc cho tôi.

Các mô-đun này đã được cài đặt:

"browser-sync": "^ 2.26.7",

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

"webpack": "^ 4.41.2",

"webpack-cli": "^ 3.3.9"


0

Vấn đề là giữa các tệp .js và .ts. Tại sao ?

Khi xây dựng dự án, Visual Studio biên dịch các tệp phân loại thành .js và .js.map. Điều này hoàn toàn không cần thiết, bởi vì webpack cũng xử lý các tệp typecript (với bộ tải kiểu chữ tuyệt vời). Khi chỉnh sửa tệp .tsx thành phần trong Visual Studio Code hoặc Với tùy chọn compileOnSave bị vô hiệu hóa trong tsconfig.json, tệp ts đã chỉnh sửa không được biên dịch lại và gói web của tôi đang xử lý tệp .js không thực tế.

Giải pháp là vô hiệu hóa việc biên dịch các tệp typecript trong studio trực quan khi xây dựng dự án. Thêm vào

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

trong PropertyGroup của .csproj của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.