2017-04-27 32 views
8

Tôi đang gặp một thời gian khó khăn để tìm ra cách chính xác tuyên bố nhập khẩu các công trình này (trong một ứng dụng kiễu góc bằng văn bản trong nguyên cảo):Đang cố gắng để hiểu được nhập khẩu RxJS

import 'rxjs/add/operator/toPromise'; 

Tôi nhận được rằng rxjs được ánh xạ tới các tương ứng node_modules thư mục con trong tệp cấu hình SystemJS, nhưng sau đó tôi bị kẹt. Tôi thấy rằng có một tệp index.js nhưng tôi không biết liệu cách này có giúp giải quyết phần add/operator/... hay không.

Tương tự như vậy, tôi không hiểu điều này một:

import {Observable} from 'rxjs/Observable'; 

Một lần nữa, không có tập tin Observable.* tập tin ở nơi này. Tôi đoán rằng nó bằng cách nào đó hoạt động thông qua tệp index.js nhưng tôi thực sự muốn hiểu rõ hơn vì tôi đọc rằng rất dễ dàng nhập tất cả RxJS do tai nạn làm tăng thời gian tải trang.

Tôi đã xem xét kỹ hơn tài liệu về độ phân giải mô-đun Phân loại nhưng tôi có cảm giác rằng điều này là không đủ để giải thích.

Cập nhật: Sau khi đọc câu trả lời được chấp nhận dưới đây tôi đã tìm ra tôi đã nhìn vào thư mục node_modules/rx thay vì node_modules/rxjs nên những điều khoản nhập khẩu phù hợp hoàn hảo với cấu trúc thư mục.

Trả lời

5

Nó khá đơn giản vì TypeScript theo mặc định sẽ xem xét thư mục node_modules.

Nhập khẩu như sau:

import {Observable} from 'rxjs/Observable'; 

được giải quyết như node_modules/rxjs/Observable.d.ts đó là đủ để biên dịch mã.

Tương tự, nhập rxjs/add/operator/toPromise được giải quyết là node_modules/rxjs/add/operator/toPromise.ts. Btw bạn có thể sử dụng tùy chọn biên dịch --traceResolution để xem đường dẫn TypeScript nào được kiểm tra.

Khi bạn có JS biên soạn của bạn (ví dụ. Ở định dạng commonjs), bạn có thể chạy ứng dụng của bạn trong node vì nó sẽ gọi require('rxjs/Observable') mà sẽ giải quyết để node_modules/rxjs/Observable.js. Sau đó tương tự với rxjs/add/operator/toPromise.

Lưu ý rằng cấu trúc mã của trang RxJS github khác với gói npm thực tế. Về cơ bản, chỉ cần package.json và thư mục src với các tệp .js.d.ts được biên dịch được tải lên kho lưu trữ npm (tệp gốc .ts nguồn nằm ở node_modules/rxjs/src nhưng bạn không bao giờ muốn làm việc trực tiếp với chúng).

+0

Ồ không, tôi đã xem nhầm thư mục ... "rx" chứ không phải "rxjs". Bây giờ nó là hoàn toàn rõ ràng, cảm ơn! – lex82

+0

Martin, tại sao họ lại sử dụng tiền tố '/ add'? Nó không có ý nghĩa gì cả –

+0

@Royi Điều gì không có ý nghĩa? Tất cả các tệp trong thư mục '/ add/...' được sử dụng để thêm toán tử vào 'Observable.prototype' (ví dụ: https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/ buffer.ts). Điều này cho phép chỉ sử dụng những toán tử mà tôi thực sự cần trong dự án của mình và do đó các gói JS với cây lắc (rollup.js, webpack2 và có thể nhiều hơn nữa) có thể tạo ra các gói nhỏ hơn. – martin

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