2016-03-13 19 views
5

Từ https://lodash.com/:tải một phương pháp duy nhất cho lodash nhỏ được xây dựng với browserify/rollup/webpack

// Load a single method for smaller builds with browserify/rollup/webpack. 
var chunk = require('lodash/chunk'); 
var extend = require('lodash/fp/extend'); 

này hoạt động tốt với hầu hết các phương pháp: each, map, isArray vv Một phương pháp tôi connot được làm việc là lodash/chain.

Mã hiện tại nơi tôi nhập khẩu các thư viện toàn lodash đi một cái gì đó như thế này:

_.chain(items) 
    .filter(...) 
    .groupBy(...) 
    .map(...) 
    .concat(...) 
    .value(); 

Điều gì sẽ được cách thích hợp của việc tạo ra một đối tượng thể kết nối thích hợp mà không chứa tất cả các phương pháp bao gồm trong lodash xây dựng? Phương thức chain tạo đối tượng trình bao bọc lodash và trả về nó. Tôi có thể tạo ra phương pháp chuỗi riêng tôi như thế này

var lodash = require('lodash/wrapperLodash'); 
var filter = require('lodash/filter'); 
var map = require('lodash/map'); 

function chain(value) { 
    var result = lodash(value); 
    result.__chain__ = true; 
    result.filter = filter 
    result.map = map; 
    return result; 
} 

module.exports = chain; 

Bây giờ cuộc gọi đến chain sẽ có thể thực hiện filtermap. Thật không may, kết quả từ chain().filter sẽ không có các phương pháp tôi đã đính kèm trong chuỗi ban đầu. Cách thích hợp để tạo một đối tượng lodash có thể tùy chỉnh chuỗi là gì?

+0

Tìm thấy. Bắt đầu với điều này: https://www.npmjs.com/package/babel-plugin-lodash. Sau đó, sau khi sử dụng plugin tôi nhận được: Xây dựng mô-đun không thành công: Lỗi: filename.js: cú pháp chuỗi lodash không được hỗ trợ bởi babel-plugin-lodash. Cân nhắc thay thế cú pháp chuỗi bằng _.flow và _.flowRight mẫu thành phần. Xem https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba. Liên kết cuối cùng có một lời giải thích rất tốt. – jmlopez

Trả lời

1

Có nhiều giải pháp khác nhau cho điều này, mặc dù không phải tất cả các giải pháp đều giữ được khả năng của chuỗi.

Lodash tùy chỉnh xây dựng (giữ chuỗi)

Sử dụng https://lodash.com/custom-builds với các phương pháp tùy chỉnh của bạn. Nó sẽ tạo ra một xây dựng lodash với các phương pháp bạn cần. Vấn đề tôi đã tìm thấy trong quá khứ với giải pháp này là số lượng kích thước của bản dựng khá cao mặc dù nhập một vài phương thức, vì nó cần toàn bộ hàm lodash bao bọc dữ liệu của bạn xung quanh nó để có thể sử dụng chuỗi .

Chỉ nhập các chức năng bạn cần (Không chuỗi)

Hầu hết các chức năng lodash có sẵn như là gói độc lập trong NPM (example pick), do đó bạn có thể nhập chúng riêng rẽ. Tuy nhiên, bạn sẽ không có chuỗi với giải pháp này.

chức năng Import from lodash src (Không chuỗi)

Một giải pháp khác là để nhập các chức năng cụ thể từ các mô-đun lodash hoàn chỉnh của bạn, vì vậy bất kỳ bundler sẽ chỉ mất chức năng đó với nó phụ thuộc thay vì toàn bộ lodash, như :

var pick = require('lodash/pick'); 

Lời khuyên: không sử dụng chuỗi

Mặc dù bạn có yêu cầu đặc biệt có cha trong, tôi muốn ngăn cản bạn sử dụng nó, vì nó là một thực hành lập trình chức năng xấu. Kiểm tra this blog article (như bạn đã đề cập trong nhận xét đầu tiên của bạn) để có giải thích rất kỹ lưỡng về lý do tại sao tốt hơn là không sử dụng chuỗi và cách di chuyển khỏi chuỗi đó.

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