2015-10-07 19 views
5

Tôi đã sử dụng lodash trong các ứng dụng và thư viện của mình và tôi đã đóng gói các ứng dụng và thư viện với webpack (và UglifyJS).Loại bỏ mã chết Lodash trong ES6

Vấn đề với điều này là khi rút gọn, nếu bạn nhập toàn bộ lodash, UglifyJS không biết loại bỏ các hàm khỏi lodash không được sử dụng. người thông minh đã đưa ra với nhập khẩu chỉ là chức năng mà bạn sẽ sử dụng từ lodash, như vậy:

var forEach = require('lodash/array/forEach'); 

này hoạt động tuyệt vời và kết quả trong một phiên bản nhỏ hơn nhiều biên soạn mã của tôi. Tuy nhiên, nó có thể rất tẻ nhạt trong các tệp sử dụng nhiều phần của lodash.

Hiệu ứng tương tự có thể đạt được bằng cách sử dụng nhập kiểu ES6 và Babel 's DCE transformer? Ví dụ:

import { forEach } from 'lodash'; 

Tôi nghi ngờ vì nó nhập từ thư mục gốc của thư viện lodash chứ không phải từ tệp của hàm riêng lẻ như ví dụ trước.

+2

Tôi không biết câu trả lời cho câu hỏi thực tế của bạn và tôi không biết nhiều về nó nhưng tôi nghĩ đó là mục tiêu của https://github.com/rollup/rollup. – JMM

Trả lời

10

Có khả năng bạn đã sử dụng Babel rồi, tôi nghĩ rằng babel-plugin-lodash có thể thực hiện thủ thuật. Nó có thể thực hiện chuyển đổi từ

import lodash from 'lodash'; 

lodash.map([1, 2, 3], function(x) { 
    // ... 
}); 

để

import _map from 'lodash/collection/map'; 

_map([1, 2, 3], function(x) { 
    // ... 
}); 

QUAN TRỌNG! Như đã đề cập bởi @reflog tại các ý kiến, cách tiếp cận này không làm việc với chuỗi lodash!

+0

Thật tuyệt vời. Tôi không có ý tưởng nào tồn tại. Cảm ơn bạn! – DynamiteReed

+2

Lưu ý rằng nó không hoạt động với chuỗi. Vì vậy, nếu bạn thử '' '_ (mảng) .map (func) .tap (log)' '' nó sẽ không hoạt động. – reflog

+0

@reflog Cảm ơn. Đã thêm ghi chú. –

Các vấn đề liên quan