2017-01-16 5 views
8

У меня есть этот NgModule:ERROR в ** не является NgModule

@NgModule({ 
    imports: [ 
     CommonModule 
    ], 
    exports: [ 
     SP21LoadingBar 
    ], 
    declarations: [SP21LoadingBar] 
}) 
export class SP21LoadingBarModule { } 

консоли IST говорил мне

ERROR in SP21LoadingBarModule is not an NgModule 

Обратите внимание: Если я взять код и поместить его в мой проект это работает отлично. Но как только я вытаскиваю модуль (и компонент) из моего проекта и помещаю его в пакет npm, я получаю эту ошибку.

Угловые используются в 2.3.1, Угловой CLI 1.0.0-beta.24, Машинописи 2.0.10

+0

У меня такая же ошибка с @ угловым/* 2.4.2, angular-cli 1.0.0-beta.25-5 и машинописным текстом 2.1.4. Работает нормально, если включено напрямую, выбрасывает ошибку «не является NgModule», если переместить ее в пакет npm. Сумасшедшая вещь заключается в том, что я проверил, что метаданные NgModule правильно прикреплены к определению модуля! –

ответ

3

ЗАКЛЮЧИТЕЛЬНОЕ решение:

Вы должны скомпилировать свою библиотеку с помощью компилятора Ahead-Of-Time (ngc). Он добавит некоторые метаданные, которые содержат проект, который включает библиотеку для ее чтения.

Пожалуйста, посмотрите на последующей ссылки:

https://angular.io/docs/ts/latest/cookbook/aot-compiler.html https://medium.com/@cyrilletuzi/how-to-build-and-publish-an-angular-module-7ad19c0b4464#.9y88ipdk7

+0

Спасибо, что руководство является удивительным, обыскали в то время, но не нашли никого. –

1

Вы должны использовать ngc (@ угловом/компилятора-кли), чтобы скомпилировать библиотеку, а против использования tsc напрямую. Это для вас?

+0

Спасибо. Я не нашел эту информацию нигде, что я должен использовать угловой компилятор. Даже не знал, что это существует. –

+0

Я тоже. Мне потребовалось некоторое время, чтобы понять это. –

0

Он работает с использованием зависимостей последующей:

{ 
    "dependencies": { 
    "@angular/common": "^2.3.1", 
    "@angular/compiler": "^2.3.1", 
    "@angular/core": "^2.3.1", 
    "@angular/forms": "^2.3.1", 
    "@angular/http": "^2.3.1", 
    "@angular/material": "^2.0.0-beta.0", 
    "@angular/platform-browser": "^2.3.1", 
    "@angular/platform-browser-dynamic": "^2.3.1", 
    "@angular/router": "^3.3.1", 
    "@angular2-material/button": "^2.0.0-alpha.8-2", 
    "@angular2-material/card": "^2.0.0-alpha.8-2", 
    "@angular2-material/checkbox": "^2.0.0-alpha.8-2", 
    "@angular2-material/core": "^2.0.0-alpha.8-2", 
    "@angular2-material/icon": "^2.0.0-alpha.8-2", 
    "@angular2-material/radio": "^2.0.0-alpha.8-2", 
    "@angular2-material/slider": "^2.0.0-alpha.8-2", 
    "@angular2-material/tooltip": "^2.0.0-alpha.8-2", 
    "@types/google-maps": "3.1.28", 
    "angular-sample-module": "^0.1.2", 
    "angular2-highcharts": "^0.3.3", 
    "atob": "^2.0.3", 
    "autopulous-xdom": "^1.0.4", 
    "bootstrap": "^3.3.7", 
    "btoa": "^1.1.2", 
    "core-js": "^2.4.1", 
    "hammerjs": "^2.0.8", 
    "highcharts": "^5.0.0", 
    "jszip": "^3.1.3", 
    "ng2-bootstrap": "^1.1.16-9", 
    "primeng": "^1.0.1", 
    "rxjs": "^5.0.1", 
    "ts-helpers": "^1.1.1", 
    "xml2js": "0.4.17", 
    "xml2js-es6-promise": "1.1.1", 
    "zone.js": "^0.7.2" }, "devDependencies": { 
    "@angular/compiler-cli": "^2.3.1", 
    "@types/hammerjs": "^2.0.33", 
    "@types/jasmine": "2.5.38", 
    "@types/jszip": "0.0.31", 
    "@types/node": "^6.0.62", 
    "@types/pako": "^0.2.31", 
    "@types/xml2js": "0.0.32", 
    **"angular-cli": "1.0.0-beta.21",** 
    "angular-ide": "^0.9.10", 
    "codelyzer": "~2.0.0-beta.1", 
    "jasmine-core": "2.5.2", 
    "jasmine-spec-reporter": "2.5.0", 
    "karma": "1.2.0", 
    "karma-chrome-launcher": "^2.0.0", 
    "karma-cli": "^1.0.1", 
    "karma-jasmine": "^1.0.2", 
    "karma-remap-istanbul": "^0.2.1", 
    "protractor": "~4.0.13", 
    "ts-node": "1.2.1", 
    "tslint": "^4.0.2", 
    "typescript": "~2.0.3" } 
} 

Я бы сказал, что проблемы на угловом CLI новейших версий. Кроме того, проект, в котором модуль HelloWorld определен (библиотека), не строится с использованием Angular CLI. Я создал его на основе следовать пример: https://www.npmjs.com/package/angular-sample-module

Тем не менее, «не является NgModule» появляется сообщение при использовании угловых консолей версий Бигерса чем [email protected]

+0

Старые версии CLI просто не проверяют это, насколько я знаю. –

+0

Чтобы решить проблему в новейших версиях CLI. (Я только что проверил с помощью Angular CLI1.0.0-beta.29). Вы должны удалить node_modules при связывании пакета. В противном случае библиотеки orignial dev используются в новом проекте, а конфликт создает сообщение. – Lupe

0

я потратил 2 дня на этой проблеме. Добавить

"angularCompilerOptions": { 
    "skipTemplateCodegen": true 
} 

к вашему tsconfig.json и это создаст все необходимые файлы метаданных. Меня устраивает.

Смежные вопросы