2016-09-05 17 views
5

Tôi đang viết thư viện Angular2 bằng Angular2 RC6.Angular2, lỗi siêu dữ liệu khi mô-đun tính năng biên dịch trước

Thư viện này chứa một mô-đun duy nhất:

import { Component, OnInit, NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 

@Component({ 
    selector: 'yeva', 
    template: '<div></div>' 
}) 
export class YevaComponent { 
    constructor() { } 
} 


@NgModule({ 
    imports: [CommonModule], 
    declarations: [YevaComponent], 
    providers: [], 
    exports: [YevaComponent] 
}) 
export class YevaModule { 

} 

Nếu tôi sao chép dán mã này vào một tập tin bản sao vào một ứng dụng Angular2 hiện có, và cố gắng sử dụng mô-đun này trực tiếp, nó hoạt động một cách hoàn hảo ...

Nhưng mục tiêu của tôi ở đây là xây dựng thư viện npm bên ngoài.

Nếu tôi di chuyển mã chính xác cùng này trong một dự án độc lập:

https://github.com/ClementVidal/starter.yeva

(Dự án này được cấu hình để được sử dụng như một thư viện Angular2, nơi nó được biên dịch sử dụng bản sao vào để được tiêu thụ bởi các ứng dụng khách hàng của tôi)

tôi nhận được lỗi sau:.

giá trị bất ngờ 'YevaModule' importe d bởi module 'AppModule'

Dưới đây là cách tôi import module của tôi trong cả hai trường hợp:

@NgModule({ 
    imports: [BrowserModule,YevaModule], 
    declarations: [AppComponent], 
    providers: [ 
    FOUNDATION_PROVIDERS 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 

} 

Lỗi này xuất phát từ trình biên dịch kiễu góc:

var importedMeta = _this.getNgModuleMetadata(importedModuleType, false); 
if (importedMeta === null) { 
    throw new Error("Unexpected " + _this._getTypeDescriptor(importedType) + " '" + stringify(importedType) + "' imported by the module '" + stringify(moduleType) + "'"); 
} 

Dường như mô-đun của tôi , khi được nhập dưới dạng mô-đun được biên dịch trước không chứa bất kỳ Siêu dữ liệu nào.

Tôi đã cố gắng để con số này ra bằng cách nhìn vào mã biên dịch, nhưng tôi đã không tìm thấy bất cứ điều gì ...

Sau đây là cách để tái tạo lỗi này:

mkdir test-metadata 
cd test-metadata 
git clone [email protected]:ClementVidal/starter.yeva.git 
git clone [email protected]:ClementVidal/starter.themba.git 
cd starter.yeva 
npm install 
sudo npm link 
cd ../starter.themba 
git checkout module-metadata 
sudo npm link __TITLE__ 
npm install 
npm run server 

Sau đó, duyệt đến http://localhost:8080/

Có ai trong số các bạn đã thử nghiệm loại sự cố này không?

Trả lời

0

Bạn đã thử không có liên kết npm chưa? Có lẽ đó là vấn đề ở đây; Tôi biết rằng webpack đang gặp khó khăn ...

Việc cài đặt thư viện của bạn từ npm có thể hoạt động. Bạn nên cố gắng phát hành một phiên bản alpha chỉ để kiểm tra, bởi vì tôi không thấy bất cứ điều gì sai trong mã của bạn.

+0

tôi đã không cố gắng đó. Tôi sẽ kiểm tra điều đó! Cảm ơn – Clement

2

Có vẻ như một hoặc nhiều tệp siêu dữ liệu phải được cung cấp bởi tác giả thư viện, một tệp cho mỗi tệp định nghĩa .d.ts. Tệp siêu dữ liệu được tạo bởi trình biên dịch Angular AOT (angular-cli).

Dưới đây là tài liệu tham khảo đó, thẳng từ góc:

Dưới đây là một ví dụ về một tác giả thư viện áp dụng thay đổi để hỗ trợ biên dịch AOT:

Tôi cũng như trong quá trình thêm hỗ trợ cho các thư viện khác và trình đó như là một PR

HTH

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