не может определить модуль для компонентного углового 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

  1. Импортировать определенный компонент.
  2. Добавьте компонент в @NgModule.

Ответ 7

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

Ответ 8

В моем случае у меня был канал, объявленный как их собственный класс в mypipe.ts а также в app.component.ts по какой-то причине. Я удаляю один в app.component, и он скомпилирован нормально.

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

Ответ 9

Я также сталкивался с той же ошибкой только в сборке prod, но не в сборке dev. Я импортировал файл component.ts в app.module.ts, но не использовал в NgModule. Поэтому я удалил импорт, он работал нормально.

Ответ 10

В моем случае было два компонента, которые называются одинаковыми. Я удалил один из них, и это исправлено.

Ответ 11

Столкнулся с этой проблемой и хотел объединить предложения и сделать несколько новых предложений (см. последнюю пронумерованную маркировку для моих предложений):

  1. В моем случае ошибка состояла в том, что он не мог определить модуль для Pipe; Я использовал кастом Pipe, введенный прямо в Angular Service.
    • Когда я перестал делать (удалил Pipe, проблема исчезла; поэтому я заменил преобразование Pipe/переместил его на другой Service, остановившись в зависимости от каналов.
  2. Убедитесь, что вы объявили (и экспортировали), правильно указали свой канал/компонент в свойствах declarationsexports) вашего NgModule
  3. Если это сторонний Pipe/Component (то есть внутри node_modules), скопируйте Pipe в ваш собственный проект (если возможно) и/или реэкспортируйте Pipe из один из ваших NgModule
  4. Если вам не нужен Pipe/Component, вы можете исключить файл, добавив свойство exclude в tsconfig.json (это может быть не вариант для всех)
  5. Или сборка без предварительной компиляции ng build --aot=false (может быть более быстрой сборкой, но затем создает неоптимизированное приложение; узнайте больше об AOT)
  6. Если это ваш Pipe/Component (против третьей стороны), убедитесь, что вы не определяете дважды ваш класс Pipe, и не объявляете дважды свой Pipe: то есть добавляете в массив declaratations из двух или более разных NgModule
  7. В ваших текстовых файлах Angular, где вы import { YourPipe } from './yoUr-pippe.ts', убедитесь, что нет опечаток или проблем с заглавными буквами в вашем операторе импорта, особенно в имени файла
  8. В моем случае вышеупомянутое не решило мои проблемы. Я сделал много шагов ниже, в конце концов проблема прекратилась. Я не уверен, кто из них добился цели:

    • Убедитесь, что любой файл 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...)