не может определить модуль для компонентного углового 5
Я получаю следующую ошибку, когда создаю приложение "Угловое", используя "ng build --prod". Это работает, когда я строю с помощью Angular 4 и получаю ошибку с угловым 5. С угловым 5-дюймовым подающим устройством работает отлично.
ERROR in Error: Невозможно определить модуль для класса TimeAgoPipe в mypath/node_modules/time-ago-pipe/time-ago-pipe.ts! Добавьте TimeAgoPipe в NgModule, чтобы исправить его.
Получение ошибки для https://www.npmjs.com/package/time-ago-pipe
Любые решения?
Ответы
Ответ 1
Проверьте регистр чувствительности
import { MyComponent } from "./User/my-component";
В моем случае проблема заключалась в том, что пользователь папки был создан с U как прописной в моем операторе импорта. Но на самом деле на диске это было в небольшом случае. Когда я переименовал папку в user (в нижнем регистре) и в операторе импорта, это сработало для меня.
import { MyComponent } from "./user/my-component";
Так что проверьте чувствительность к регистру вашего пути импорта.
Ответ 2
Угловой 5 и, в частности, угловой cli 1.5 имеет встроенную по умолчанию компоновку времени, и она должна знать модуль для всех компонентов/труб и т.д., Которые он находит в вашей папке проекта, если у вас есть некоторые компоненты, которые не объявлены ни в одном модуле, это будет бросать ошибки.
Вы можете объявить TimeAgoPipe
в каком-то модуле:
@NgModule({
declarations: [TimeAgoPipe, ...]
})
export class AppModule {}// for example can be any other used module
или попробуйте запустить сборку без предвыборного компиляции, итоговый код будет работать медленнее
ng build --prod --aot=false
третий путь, если вы не используете этот канал, вы можете добавить его в исключенные файлы в tsconfig.json
{
...
"exclude": [ "path/to/unused/component.ts", ... ]
}
Ответ 3
В моем случае ошибка была связана с несколькими определениями одного и того же класса в разных файлах. Это произошло из-за кодов копирования-вставки некоторыми разработчиками.
Ответ 4
У меня была точно такая же проблема, и я могу предложить обходной путь, хотя не знаю, почему эта конкретная труба не была успешно собрана сборкой aot:
Временное решение
Скопируйте time-ago-pipe.ts из node_modules/time-ago-pipe и просто скопируйте этот файл в свой собственный проект.
Добавьте его в свои объявления в своем модуле как обычно и импортируйте его в свои импорт, например:
import { TimeAgoPipe } from './_pipes/time-ago-pipe';
Затем он успешно скомпилируется в сборке AOT, и вы все равно можете использовать этот канал.
Ответ 5
Для меня это не сработало, даже когда компонент был в объявлениях. Таким образом, я удалил компонент из деклараций и из импорта. Затем я прочитал его, используя код Visual Studio intellisense для автоматического заполнения имени компонента в объявлениях и используя автоматический импорт для импорта компонента в верхней части файла модуля. И, к моему удивлению, это сработало.
Если какое-либо из вышеперечисленных решений не сработало для вас, то это также стоит попробовать.
Ответ 6
- Импортировать определенный компонент.
- Добавьте компонент в @NgModule.
Ответ 7
для меня проблема была чувствительна к регистру в путях импорта. но вы должны найти все пути импорта, которые имеют проблемы. не только импорт, который используется в вашем модуле.
Ответ 8
В моем случае у меня был канал, объявленный как их собственный класс в mypipe.ts
а также в app.component.ts
по какой-то причине. Я удаляю один в app.component, и он скомпилирован нормально.
В сообщении об ошибке проверьте, куда именно он жалуется, и посмотрите, является ли это двойным кодом в вашем проекте.
Ответ 9
Я также сталкивался с той же ошибкой только в сборке prod, но не в сборке dev. Я импортировал файл component.ts в app.module.ts, но не использовал в NgModule. Поэтому я удалил импорт, он работал нормально.
Ответ 10
В моем случае было два компонента, которые называются одинаковыми. Я удалил один из них, и это исправлено.
Ответ 11
Столкнулся с этой проблемой и хотел объединить предложения и сделать несколько новых предложений (см. последнюю пронумерованную маркировку для моих предложений):
- В моем случае ошибка состояла в том, что он не мог определить модуль для
Pipe
; Я использовал кастом Pipe
, введенный прямо в Angular Service
.
- Когда я перестал делать (удалил
Pipe
, проблема исчезла; поэтому я заменил преобразование Pipe
/переместил его на другой Service
, остановившись в зависимости от каналов.
- Убедитесь, что вы объявили (и экспортировали), правильно указали свой канал/компонент в свойствах
declarations
(и exports
) вашего NgModule
- Если это сторонний Pipe/Component (то есть внутри
node_modules
), скопируйте Pipe в ваш собственный проект (если возможно) и/или реэкспортируйте Pipe из один из ваших NgModule
- Если вам не нужен Pipe/Component, вы можете исключить файл, добавив свойство
exclude
в tsconfig.json
(это может быть не вариант для всех)
- Или сборка без предварительной компиляции
ng build --aot=false
(может быть более быстрой сборкой, но затем создает неоптимизированное приложение; узнайте больше об AOT)
- Если это ваш Pipe/Component (против третьей стороны), убедитесь, что вы не определяете дважды ваш класс Pipe, и не объявляете дважды свой Pipe: то есть добавляете в массив
declaratations
из двух или более разных NgModule
- В ваших текстовых файлах Angular, где вы
import { YourPipe } from './yoUr-pippe.ts'
, убедитесь, что нет опечаток или проблем с заглавными буквами в вашем операторе импорта, особенно в имени файла
В моем случае вышеупомянутое не решило мои проблемы. Я сделал много шагов ниже, в конце концов проблема прекратилась. Я не уверен, кто из них добился цели:
- Убедитесь, что любой файл
ts
, в котором используется проблемный канал/компонент, находится в NgModule
, который import
NgModule
, который определил канал/компонент!
- Например, если
AModule
определяет AComponent
, который использует BPipe
, определенный в BModule
, то AModule
должен import
BModule
- В моем случае я перестроил дерево зависимостей
NgModule
. Я использовал шаблон "общий модуль", чтобы мой Pipe можно было повторно использовать в нескольких местах.
- Убедитесь, что нет циклических
NgModule
зависимостей, как в этих примерах
Если вы можете, обновите NodeJS
себя и/или angular
и его инструменты (angular-cli
и т.д.)
- Я столкнулся с не связанными проблемами, поэтому я обнаружил этот список предложений... после того, как обратился к другим проблемам, с которыми я столкнулся... но эти предложения исправили другие проблемы, и позволили мне вернуться к
Cannot determine the module...
проблема (которая перестала происходить!)
Будьте осторожны с использованием файлов index.ts
, так называемых "бочечных файлов", и порядка exports
- Общий подход к решению проблем: Удалить/закомментировать все ссылки на проблемный файл,
- Удаляйте ссылки по одному, из каждого файла, пока ваша угловая сборка приложения не будет работать. Если из определенного файла удаляется проблема, у вас есть подсказка, какой файл является источником проблемы
- Если вам нужно удалить ссылки из всех файлов (что может быть слишком сложно сделать; для меня это было не слишком много/не слишком сложно); тогда ваше угловое приложение должно скомпилироваться..
- Подтвердите, что ваше угловое приложение все еще строит. В моем случае моя угловая сборка имела другие, более простые ошибки, которые я мог исправить (например,
Can't bind to '___' since it isn't a known property of '___'
, или Property '___' does not exist on type '___'. Did you mean '____'
, или Expected 0 arguments, but got 1.
- (После исправления всех проблем вы можете постепенно раскомментировать свой код, в то же время гарантируя, что ваш
ng build
работает. Когда я раскомментировал/добавил весь свой код обратно... у моего ng build
больше не было проблемы Cannot determine the module...
)