Tôi vừa cập nhật xong ứng dụng phản hồi của mình từ webpack 1 lên webpack 2. Tuy nhiên, kích thước gói của tôi tăng thêm ~ 30Kb. Tôi đã hy vọng kích thước gói sẽ giảm, Làm thế nào tôi có thể xác nhận rằng cây lắc làm việc. Và tại sao lại tăng?làm thế nào để xác nhận nếu cây lắc đang làm việc với Webpack 2?
Trả lời
Có một vài bước bạn có thể thực hiện:
- tắt việc rút gọn/làm xấu đi
- comments chèn vào một số chức năng bạn biết là không sử dụng
- kiểm tra đầu ra để xem những ý kiến đang có hoặc không
Webpack cũng có thể hiển thị cho bạn kích thước của từng mô-đun/gói nhập. Ví dụ, tại nơi làm việc, chúng tôi có một gói bao gồm cả lodash và gạch dưới vì một trong các thư viện mà chúng tôi đang sử dụng yêu cầu mỗi thư viện; webpack rõ ràng cho thấy có bao nhiêu kilobyte từng gói cho biết thêm:
Bạn sẽ có thể nhìn thấy từ này, nơi sự gia tăng kích thước là đến từ.
TL; DR: Kể từ phiên bản 2.3, webpack không có bất kỳ sự rung lắc nào của cây. Nó chỉ sử dụng UglifyJS để loại bỏ mã không sử dụng.
Trước tiên, chúng ta phải xác định cây lắc là gì.
Stackoverflow định nghĩa nó là "thuật toán xóa mã chết cho javascript hiện đại".
Gói web làm rõ rằng nó dựa vào nhập/xuất mô-đun ES2015 cho cấu trúc tĩnh của hệ thống mô-đun của nó.
Rollup (ban đầu được phổ biến rộng rãi trong thuật ngữ) cũng có giải thích tương tự.
Vì vậy, chúng tôi có thể suy ra một định nghĩa cụ thể: loại trừ tĩnh của các mô-đun ES không được sử dụng.
Bây giờ, chúng ta hãy xem những giai đoạn chuyển đổi mỗi module thường có:
- babel-loader được đưa một điểm mấu chốt mà là một tập tin javascript trong một số định dạng module. Babel có thể chuyển đổi sang định dạng mô-đun khác để giữ nguyên định dạng (
module: false
) - gói web sẽ phân tích cú pháp tệp tĩnh và tìm mô-đun đã nhập (sử dụng một số loại regexp). không biến dạng nó) hoặc thêm một số hàm bao (đối với mô-đun commonjs)
- mô-đun đã nhập trở thành điểm vào và chuyển đến bộ nạp babel
- sau khi tất cả các mô-đun được tải và chuyển đổi, uglify sẽ xử lý kết quả và xóa mã không sử dụng (
unused: true
)
Bây giờ, chúng ta có thể thấy rằng mặc dù uglify có thể loại bỏ các xuất khẩu không sử dụng nhưng nó không thực sự dựa vào cú pháp mô-đun ES.Nó chỉ là một loại bỏ mã đích cho mục đích chung để nó không thể được định nghĩa là "Cây lắc".
Vậy làm cách nào để chúng tôi có thể xác nhận liệu webpack có lắc cây không?
- Trước hết, tất cả mã phải ở định dạng mô-đun ES.
- Vì nó đã được đề cập trong một câu trả lời khác, chúng ta phải vô hiệu hóa Uglify.
- Chúng tôi cũng phải tắt chuyển đổi mô-đun của babel vì chúng tôi không thể biết liệu một mô-đun có được sử dụng ở giai đoạn đó hay không.
Và bây giờ nếu webpack thực sự thực hiện một cây lắc thuật toán chúng ta có thể khẳng định nó bằng cách nhìn vào kích thước bó của điểm cụm từ này:
import { keyBy } from 'lodash-es'; // lodash is in ES module format
console.log(keyBy([{ key: 'value' }], 'key'));
Nếu webpack không có cây lắc kết quả nên được hàng chục kilobyte. Nếu nó không phải là một nửa megabyte trở lên.
- 1. Làm thế nào để sử dụng cây lắc với webpack 2 và kiểu chữ và góc 2?
- 2. Có cách nào để tắt tính năng lắc cây trong webpack 2 không?
- 3. Webpack 2 Không Tree Lắc D3.js đúng
- 4. Làm thế nào để sử dụng jquery với angular2 webpack? Nhận $ không được xác định
- 5. Webpack 2 "xuất khẩu không được xác định"
- 6. Webpack có thể lắc cây loại bỏ các polyfill không sử dụng không?
- 7. Làm thế nào để sử dụng Webpack với Angular + templateCache?
- 8. Cấu hình Webpack 2 cho Tree lắc và tải chậm với System.import trên React project
- 9. Giá trị của việc sử dụng Webpack với HTTP/2
- 10. Làm thế nào để xác minh rằng khách hàng của Amazon Kinesis Python đang làm việc
- 11. Nhận xác thực cơ bản để làm việc với ColdFusion
- 12. Làm thế nào để làm việc với 2 XMLHttpRequest phụ thuộc vào cái khác?
- 13. Làm cách nào để xác nhận cửa sổ trình duyệt đang mở, với Javascript?
- 14. Làm thế nào để hạn chế Webpack `require.context` gọn gàng?
- 15. Làm cách nào để xác nhận việc tiêm SQL
- 16. Three.js - vấn đề với hiển thị - hoạt ảnh đang lắc
- 17. R caret/Làm thế nào để xác nhận chéo cho tàu trong công việc rfe
- 18. Làm thế nào tôi có thể lập trình xác định nếu một trang IIS đang nhận yêu cầu?
- 19. Làm thế nào để Hot Reload Sass Sử dụng Webpack 2?
- 20. Làm thế nào để loại bỏ cây làm việc từ một kho Git
- 21. Làm cách nào để Winston hoạt động với Webpack?
- 22. Làm thế nào để tôi xác định các Phím khi làm việc với "EF-Code First"?
- 23. Làm thế nào để đếm con trong một cây
- 24. Làm thế nào để std :: bản đồ iterator làm việc?
- 25. Làm thế nào để sử dụng xác nhận Struts2 để xác nhận điều kiện?
- 26. Làm thế nào để kiểm tra theo chương trình nếu xác nhận được bật?
- 27. Làm thế nào để chơi mp3 với Angular 2?
- 28. Làm cách nào để tìm hiểu với jQuery nếu một phần tử đang được làm động?
- 29. Cây đỏ-đen có hình dạng như thế nào với 2-3-4 cây?
- 30. như thế nào shared_ptr làm việc trong điều kiện nếu
tôi đã làm theo hướng dẫn di chuyển webpack để cập nhật. Vì vậy, đối với bước 1 tôi chỉ nên đặt ** giảm thiểu: sai; trong theLoaderOptionsPlugin ** hoặc chỉ xóa uglify khỏi plugin env sản xuất và cho bước 2, tôi có tìm kiếm tệp js được nhóm để xem các nhận xét có được bao gồm không? – jasan