2016-10-15 25 views
7

Tôi đã cố gắng tạo bản trình diễn cho một câu hỏi SO khác, đầu tiên với angular-cli, sau đó với punker.Hành vi nhập kiểu chữ lạ/angular2

Tôi gặp phải sự khác biệt về hành vi lạ trong import giữa hai phiên bản.

Vấn đề là trong lần thứ hai import của đoạn mã sau:

moment.service.ts

import { Injectable } from '@angular/core'; 

// Following work in plunker setup 
import m from 'moment'; 
// Following work in angular-cli setup 
//import * as m from 'moment'; 

@Injectable() 
export class MomentService { 
    moment = m; 
} 

Trong mã góc-cli, tôi phải sử dụng:

import * as m from 'moment'; 

Nếu tôi sử dụng thiết lập punker, không có vấn đề trong punker hoặc chạy với máy chủ cục bộ, tôi phải theo dõi hoặc nó sẽ không chạy trong trình duyệt:

import m from 'moment'; 

Bất kỳ ai cũng có thể giải thích sự khác biệt về hành vi?

Plunker: Link

Github: plunker code local version (bao gồm server.js để phục vụ tại địa phương)

Github: angular-cli version

Trả lời

8

TL: DR Mỗi bản demo đang sử dụng một định dạng mô-đun khác nhau. Trong plunker toàn bộ mô-đun được coi là xuất khẩu mặc định. Trong dự án cli, không có xuất mặc định.

Mỗi bản trình diễn đang sử dụng định dạng mô-đun khác. Các plunker không chỉ định một định dạng, tôi không chắc chắn những gì systemjs định dạng sử dụng theo mặc định, nhưng tôi không tin rằng đó là ES6. Dự án CLI đang sử dụng định dạng mô-đun ES6.

Nếu bạn xem here, bạn sẽ thấy khi định dạng mô-đun là AMD, commonjs hoặc toàn cầu, nó sẽ xuất toàn bộ mô-đun làm mặc định xuất. Điều này sẽ không xảy ra với các mô-đun ES6, bạn cần xác định rõ ràng xuất mặc định, thời điểm nào không xuất hiện.

Vì vậy, trong bản trình diễn plunker, import m from 'moment' hoạt động vì cấu hình của bạn thông báo cho systemjs và bản ghi để xử lý toàn bộ mô-đun làm xuất mặc định nếu không có. Do cấu hình trong dự án CLI, mô-đun không được coi là xuất mặc định, do đó bạn phải sử dụng import * as m from 'moment' cho biết nhập tất cả các tên đã xuất từ ​​thời điểm dưới không gian tên 'm'.

Here is a discussion on TypeScript's repo regarding this

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