У меня есть приложение Angular, которое отлично работает, когда я запускаю ng serve
из командной строки. Однако, когда я помещаю приложение в контейнер Docker и пытаюсь запустить контейнер, я получаю эту ошибку в DOM (просто отрывок):
Uncaught Error: Template parse errors:
Can't bind to 'formGroup' since it isn't a known property of 'form'. ("
<div class = "col-md-6 offset-md-3">
<h2>Register new User</h2>
<form [ERROR ->][formGroup] = "registerForm" (ngSubmit) = "onSubmit()">
<div class = "form-group">
"): ng:///AppModule/RegisterComponent.html@5:14
No provider for ControlContainer ("
<div class = "col-md-6 offset-md-3">
<h2>Register new User</h2>
[ERROR ->]<form [formGroup] = "registerForm" (ngSubmit) = "onSubmit()">
<div class = "form-group">
"): ng:///AppModule/RegisterComponent.html@5:8
No provider for NgControl ("
<div class = "form-group">
<label>First Name</label>
[ERROR ->]<input type = "text" formControlName = "firstName"
class = "form-control" [ngClass] = "{ 'is-invalid': submit"): ng:///AppModule/RegisterComponent.html@8:12
No provider for NgControl ("
<div class = "form-group">
<label>Last Name</label>
[ERROR ->]<input type = "text" formControlName = "lastName" class = "form-control" [ngClass] = "{ 'is-invalid': submitt"): ng:///AppModule/RegisterComponent.html@15:12
ng:///AppModule/RegisterComponent.html@39:12
at syntaxError (compiler.js:215)
at
TemplateParser.push../node_modules/@angular/compiler/fesm5/compiler.js.TemplateParser.parse (compiler.js:14702)
at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._parseTemplate (compiler.js:22709)
Мой Dockerfile (который создается в правильном месте) выглядит следующим образом:
# Stage 1 Build
FROM node:8.11.3
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH ./node_modules/bin:$PATH
COPY package*.json ./
RUN npm install
RUN npm install -g @angular/[email protected]
COPY . /usr/src/app
CMD ng serve --host 0.0.0.0
#Stage 2
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
WORKDIR /usr/share/nginx/html
COPY dist/ .
Многие из решений, которые я исследовал до сих пор, включают внесение изменений в файл app.module.ts
, которые позволяют импортировать и экспортировать FormsModule
и ReactiveFormsModule
:
exports: [FormsModule, ReactiveFormsModule, CommonModule],
imports: [
BrowserModule,
FormsModule,
HttpClientModule,
HttpModule,
ReactiveFormsModule,
CommonModule,
RouterModule.forRoot(appRoutes)
Но мне все еще не удалось заставить это работать через Docker. Кто-нибудь сталкивался с этой проблемой в прошлом?
Я переключил две инструкции по установке RUN npm, так что сначала идет angular cli. Но, похоже, дает тот же результат. Хотя очень признателен, даже не подумал об этом.
Еще одна странная мысль: команды «RUN» dockerfile не обязательно выполняются в ожидаемом вами порядке, поскольку они могут быть кэшированы. Так что, возможно, может помочь один «RUN» с командами, объединенными с «&&».
Что-то вроде «ЗАПУСТИТЬ npm install -g @ angular / cli @ 6.0.8 && npm install»?
Практически, оставьте вторую строку «RUN»: RUN npm install -g @ angular / cli @ 6.0.8 && npm install или, если вы хотите, чтобы она была более читаемой: RUN npm install -g @ angular / cli @ 6.0.8 \ (new строка здесь) npm install
Все еще вижу те же ошибки :(
Только предположение, но разве для некоторых пакетов angular, которые вы устанавливаете, уже не требуется angular cli? Что я имею в виду: может быть, попробуйте установить angular cli, прежде чем выполнять npm install