Сбой компиляции AOT для Angular Material или Package Format 4.0

Когда я импортирую Angular Material (или любые другие модули Package Format 4.0), компиляция AOT завершается сбоем.

import { NgModule, ModuleWithProviders } from '@angular/core';
import {MdButtonModule, MdCheckboxModule} from '@angular/material';

@NgModule({
  imports:      [ 
                    MdButtonModule, 
                    MdCheckboxModule
                ],
  exports:      [ 
                    MdButtonModule, 
                    MdCheckboxModule
                ]
})

export class NorSharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: NorSharedModule
    };
  }
}

Когда я компилирую с помощью AOT, сгенерированные файлы ngfactory для Angular Material создают циклический импорт.

index.ngfactory.ts

/**
 * @fileoverview This file is generated by the Angular template compiler.
 * Do not edit.
 * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride}
 */
 /* tslint:disable */

import * as i0 from '@angular/core';
import * as i1 from '@angular/material';
import * as i2 from '@angular/common';
import * as i3 from '@angular/platform-browser';
import * as i4 from './index.ngfactory';
import * as i5 from '@angular/forms';
import * as i6 from '@angular/http';
export const MdCoreModuleNgFactory:i0.NgModuleFactory<i1.MdCoreModule> = i0.ɵcmf(i1.MdCoreModule,

Это, конечно, нарушает следующий шаг процесса сборки. Сводка не может объединяться.

[8:51:38] LOG ngc started compiling ngfactory
[8:51:50] LOG ngc compiled /ngfactory 
[8:51:50] LOG Rollup started bundling ngfactory
Error: A module cannot import itself
ngfactory/node_modules/@angular/material/typings/index.ngfactory.js (5:0)
3: import * as i2 from '@angular/common';
4: import * as i3 from '@angular/platform-browser';
5: import * as i4 from './index.ngfactory';
   ^
6: import * as i5 from '@angular/forms';
7: import * as i6 from '@angular/http';

Это повторяется в 4.2.0-rc.2 и 4.2.0.


person steveblue    schedule 09.06.2017    source источник


Ответы (2)


Это было исправлено здесь.

Вы можете обновить @angular/compiler и @angular/compiler-cli до 4.3.0-beta.0.

Однако вы обнаружите новую проблему ...

(function (exports, require, module, __filename, __dirname) { import * as i0 from '@angular/core';
SyntaxError: Unexpected token import

ИЗМЕНИТЬ

Вы можете следить за вторым выпуском здесь

person Dev    schedule 22.06.2017

Скорее всего, это ошибка с Package Format 4.0, tsickle и ngfactories, и я сообщил об этом команде Angular. Есть обходной путь.

После запуска ngc найдите файлы ngfactory для каждой библиотеки, продублируйте файл, переименуйте его с суффиксом .imports.js, затем импортируйте новый файл в исходный ngfactory. Это удалит циклический импорт.

person steveblue    schedule 10.06.2017