問題
私のhtmlファイルは、カスタムコンポーネント/パイプが「既知の要素ではない」ことを警告しています。ただし、アプリケーションのビルドと実行意図したとおりに機能、およびカスタムコンポーネント/パイプは機能します。コンポーネントの二分法は機能しますが、エラーとして表示するのは煩わしく、操作が難しい場合があります。これは小さなことですが、エラーが発生していないときにHTMLファイルにエラーが表示されないようにしたいのです。
概要
2つの異なるangularプロジェクトがあります。angularライブラリを自分のangularアプリケーションで使用します。ライブラリはいくつかのカスタムをエクスポートしますアプリケーションが使用するコンポーネント、パイプ、サービス。npmを介してこのライブラリを公開していません。代わりにnpm-linkを使用して、アプリケーションにライブラリへのアクセスを許可しています。これは、アプリケーションコンポーネントで定義されているサービス/コンポーネントが機能するように機能するようですライブラリからテンプレートファイルに何かを入れた瞬間、そのセレクターに下線が引かれ、警告が表示されます。
ファイル
/*Library Module*/
@NgModule({
declarations: [
ThemeToggleComponent,
// Other custom components/pipes
],
exports: [
ThemeToggleComponent,
// Other components needed in templates files
]
})
export class MyCommonModule {}
/*
* Public API Surface of my-common library
*/
export * from './lib/my-common.module';
/*
* Many other components, services, pipes, etc etc
*/
export * from './lib/theme-toggle/theme-toggle.component';
/* Consuming Application module */
import { MyCommonModule } from 'my-common';
@NgModule({
imports: [
MyCommonModule,
],
declarations: [
MyComponent,
],
})
export class MyModule {}
/* Template of MyComponent, my.component.html */
<div>
<my-theme-toggle (darkThemeSelected)="toggleTheme($event)"></my-theme-toggle>
</div>
上記のファイルには、カスタムコンポーネントを参照するすべての行が赤で下線が引かれ、エラーメッセージが表示されます'my-theme-toggle' is not a known element:...。
修正しようとする試み
私は何かを試しましたが、役に立ちません
私の直感
これは、消費するアプリケーションのtsconfig.jsonにあるpathsコンパイラオプションの問題だと思います。私のすべての研究を通して、これは他の何よりも浮かび上がる1つのことです。すべてが機能しているため、現在パスを設定していません。私の共通ライブラリは、この問題以外は、他のnode_moduleライブラリと同じように見え、動作します。
私のもう1つの考えは、すべてが機能して実行されるため、vs-codeがインポートまたはその性質の何かを理解していないことに問題がある可能性があるということです。これはありそうもないと思いますが。
背景
両方angularプロジェクトはバージョン9、rc7にあります。私はng-packagrを使用してライブラリをビルドしています。ビジュアルスタジオコードを使用しており、執筆時点では最新のリリースを使用しています。
私は最近までそのようなエラーを説明したことがありませんでした。
Angular言語サービス拡張機能(最近インストールしたもの)をアンインストールした後)はエラーがなくなりました。
この問題を修正するには、現在、生産フラグ--prod
を使用してビルドする必要があります。これは、現在の状態では Angular Language ServerはIvyでは機能しない ビルドであるためです。デフォルトでは、angular prodビルドはIvyなしでビルドされます。したがって、ビルドされると、lib.metadata.json
ファイルが作成されます。これは、言語サーバーがプラグインを機能させるために使用するファイルです。
ng build <lib> --prod
--watch
フラグを追加して、変更を監視しますcd dist
次にnpm link
dist
フォルダーにpackage.json
を作成し、そこにリンクを作成しました。これはあなたができるようになりますimport { ModuleAComponent } from '<lib>/moduleA'
import { ModuleADirective } from '<lib>/moduleA'
package.json
が必要です。それ以外の場合は、最も近いのでプロジェクトのルートを使用しますpackage.json
"lib": ["./node_modules/lib", "./node_modules/lib/*"]
npm link <lib>
path
をtsconfig.base.json
に作成します(パスはリンクの作成方法によって異なる場合があります){
"compilerOptions": {
"paths": {
"lib/*": [
"./node_modules/lib/*"
]
}
}
}
まったく同じ問題があります。ここに修正があります、
追加
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
そして
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
あなたのモジュールに
完了 app.module.ts
ご参考に
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NgNiceSelectModule } from 'ng-Nice-select';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
NgNiceSelectModule
],
providers: [],
bootstrap: [AppComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
})
export class AppModule { }