Я работаю с довольно стандартной настройкой проекта Ionic v3 и пытаюсь расширить BaseInput
для пользовательского компонента. Поскольку он не отображается через ionic-angular
, я пытаюсь импортировать его как не-UMD,
import { BaseInput } from 'ionic-angular/util/base-input';
или как UMD,
import { BaseInput } from 'ionic-angular/umd/util/base-input';
Первый (неUMD) работает с JIT-компилятором, например, при запуске приложения через ionic serve
. Однако при попытке выполнить сборку prod (ionic cordova build <platform> --prod
) происходит сбой с внешне не связанными ошибками машинописи («Невозможно определить модуль для класса [...] в [...]»).
В случае импорта из UMD сборки prod (с компилятором AOT) проходят без ошибок, но попытка запустить приложение завершается неудачно с сообщением об ошибке:
Error: Cannot find module "."
at webpackMissingModule (webpack:///node_modules/ionic-angular/umd/util/base-input.js:13:24 <- test-config/karma-integration-test-shim.js:180279:69)
at webpack:///node_modules/ionic-angular/umd/util/base-input.js:13:24 <- test-config/karma-integration-test-shim.js:180279:147
at Object.<anonymous> (webpack:///node_modules/ionic-angular/umd/util/base-input.js:19:1 <- test-config/karma-integration-test-shim.js:180288:3)
at __webpack_require__ (webpack:///webpack/bootstrap%20e1799a6a30ca82a9bd77:19 <- test-config/karma-integration-test-shim.js:20:30)
at Object.<anonymous> (test-config/karma-integration-test-shim.js:180256:92)
[...]
Как я могуимпортировать BaseInput
способом, соответствующим как JIT, так и компилятору AOT?
Обновление: обходной путь
В качестве обходного пути мой класс теперь просто расширяет IonInput
и реализует ControlValueAccessor
.
При этом не забудьте установить аксессор значения, если это необходимо, например, поместите это в конструктор:
if (_ngControl) {
_ngControl.valueAccessor = this;
}