Tôi bắt đầu với Rollup và D3 phiên bản 4, được viết bằng các mô-đun ES2015. Tôi đã viết một số mã bằng cách sử dụng không gian tên D3 truyền thống "d3". Bây giờ tôi muốn tạo một gói tùy chỉnh bằng cách sử dụng Rollup. Tôi muốn sử dụng cây lắc, bởi vì tôi có lẽ chỉ sử dụng khoảng một nửa các chức năng trong d3, và tôi muốn giữ mọi thứ càng nhẹ càng tốt.Làm cách nào để nhập các hàm mô-đun ES2015 có chọn lọc, nhưng với cách đặt tên không?
Tôi rõ ràng rằng tôi có thể nhập các chức năng một cách chọn lọc, ví dụ .:
import {scaleLinear} from "d3-scale";
import {
event,
select,
selectAll
} from "d3-selection";
Đó là sẽ nhận được rất tiết rất nhanh, bởi vì một nửa số d3 là rất nhiều chức năng. Tôi có thể sống với điều đó. Vấn đề lớn hơn là nó cũng sẽ yêu cầu viết lại hoàn toàn tất cả các định danh hàm của tôi mà không có một vùng tên. Tôi không quan tâm nhiều đến điều đó, bởi vì tôi thích không gian tên mã thư viện.
Tôi hiểu rằng tôi có thể nhập tất cả các mô-đun:
import * as d3 from "d3";
mà bảo tồn không gian tên đối tượng d3, đó là tốt cho tổ chức mã của tôi. Nhưng sau đó Rollup không thể cây lắc các chức năng không sử dụng ra khỏi bó.
Những gì tôi đang mơ về một cái gì đó như:
import {
event,
select,
selectAll
} as d3 from "d3-selection";
nhưng mà loại tính năng/cú pháp dường như không tồn tại trong spec. Làm cách nào để tôi có thể nhắm mục tiêu có chọn lọc từng phần riêng lẻ của mô-đun và bảo toàn không gian tên trong khi nhập?
Bạn có thể sử dụng '*' nhập và Rollup sẽ cây lắc chúng miễn là bạn không sử dụng chính không gian tên (ví dụ: chuyển nó vào hàm). Nhưng cây lắc không phải là hoàn hảo (vì bản chất của JavaScript) nên việc nhập trực tiếp từ 'd3' sẽ bao gồm mã không sử dụng (chúng tôi đang cố gắng làm cho nó tốt hơn), vì vậy việc nhập khẩu có chọn lọc từ các mô-đun bạn cần sẽ luôn cung cấp cho bạn gói được tối ưu hóa cao nhất. Cá nhân tôi ưu tiên nhập khẩu một cách rõ ràng các hàm tôi đang thực sự sử dụng, nhưng @estus có ý tưởng đúng nếu bạn không muốn làm điều đó. –
@RichHarris Việc nhập khẩu có chọn lọc (Tôi cho rằng bạn có nghĩa là nhập khẩu có tên) dẫn đến rung lắc cây khác nhau hơn là chọn lọc bằng cách sử dụng đối tượng không gian tên? – Bergi
@Bergi vì sau đó bạn có thể nhập dễ dàng hơn từ ví dụ: 'd3-selection',' d3-scale' et al, thay vì 'd3' –