2017-02-04 5 views
2

У меня проблема с модулем между приложениями ng2. Вот очень простой сценарий для демонстрации проблемы. Использование угловых кли полностью:Angular 2 - обмен модулем между различными приложениями ng2

  • Приложение SharedModule, созданное с помощью ng new SharedModule.
  • Приложение MyApp, созданное с помощью ng new MyApp.
  • Модуль в приложении SharedModule экспортирует пользовательский компонент (который я хотел бы использовать в приложении MyApp).
  • Главный модуль MyApp импортирует модуль из приложения SharedModule.
  • При попытке запуска MyApp с ng serve, он дует с ошибкой:

    Error encountered resolving symbol values statically. Calling function 'makeDecorator', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function... error

Опуская не важные вещи, очень основная структура выглядит следующим образом:

MyApp 
|────angular-cli.json 
|────package.json 
| 
└──src 
    └─app 
    |────app.module.ts 
    |────app-root.component.ts 
    └─ 

SharedModule 
|────angular-cli.json 
|────package.json 
| 
└─src 
    └─app 
    |────app-root.component.ts 
    |────custom-input.component.ts 
    |────shared.module.ts 
    └─ 

Ключевой момент здесь что MyApp и SharedModule - это два разных приложения. Если я попытаюсь поместить общий модуль внутри MyApp (вместе с экспортированным пользовательским компонентом), то он будет работать нормально. К сожалению, сейчас это не вариант, и я должен держать модули/приложения отдельными. Также создание пакета npm из SharedModule и установка его в MyApp не является вариантом.

Я создал github repository, демонстрируя проблему. Для того, чтобы запустить его:

  • пробег npm install в MYAPP и SharedModule папки.
  • run npm start в папке MyApp.

Вопрос о миллионе долларов здесь, как я могу сделать эту работу? Благодарю.

ответ

3

Я бы сказал, что проблема заключается в том, что Угловая CLI теперь использует AoT Compile по умолчанию.

В этом случае SharedModule, который вы импортируете, должен быть подвержен статистическому анализу, чтобы его можно было построить рядом с вашим MyApp.

При создании приложения с использованием CLI он не ожидает, что вы будете использовать его как разделяемую библиотеку, и, таким образом, не включает необходимые файлы *.metadata.json, которые компилятор AoT должен проанализировать.

я мог объяснить это дальше, но Theres большой статьи об этом на среду, где я узнал об этом:

Getting your Angular 2 Library ready for AoT

Надеется, что это поможет вам тоже.

EDIT:

Есть также пару угловой 2 библиотеки, которые столкнулись с этой проблемой, когда C была обновлена. Для того, чтобы назвать пару вопросов, которые могут помочь вам:

Tag-Input

Clarity

0

общественный ваш SharedApp в github, затем общедоступный для npmjs.

в MyApp, просто npm install --save your/shared-app, а затем использовать SharedApp в MyApp

1

Теперь вы можете поделиться своими модулями между приложениями в угловом. Просто следуйте this guide on using multiple apps to an angular project, в руководстве он ставит два приложения в угловом-cli.json и может публиковать & служить им seperatly с флагом --app:

ng serve --app 0 
ng build --app 1 

или как это:

ng serve --app app1 
ng build --app app2 

I испытал это сам, но боролся некоторое время, поэтому сам задал вопрос: Share a module between multiple angular apps that resides in the same project.

+0

Пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. (Цитата из [ответить]) –

+1

Извините, мой плохой! Я немного расширил свой ответ. – JulianSim