Vscode-ng-language-service: Angular蚀語サヌビスは、Ivyで構築されたラむブラリのコンポヌネントを認識したせん。

䜜成日 2019幎12月05日  Â·  23コメント  Â·  ゜ヌス: angular/vscode-ng-language-service

🐞バグレポヌト

圱響を受けるパッケヌゞ

この問題はパッケヌゞ@angular / language-serviceが原因で発生したす

説明

Angular蚀語サヌビスは、Ivyで構築されたラむブラリのコンポヌネントを認識したせん。
アプリケヌションは正しく構築されおいたす。

゚ラヌ


'lib-component' is not a known element:
1. If 'lib-component' is an Angular component, then verify that it is part of this module.
2. If 'lib-component' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.ng(0)

環境


Editor: VisualStudio Code
Editor extension: angular.ng-template v0.900.0

Angular CLI: 9.0.0-rc.5
Node: 10.17.0
OS: darwin x64

Angular: 9.0.0-rc.5
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.900.0-rc.5
@angular-devkit/build-angular      0.900.0-rc.5
@angular-devkit/build-ng-packagr   0.900.0-rc.5
@angular-devkit/build-optimizer    0.900.0-rc.5
@angular-devkit/build-webpack      0.900.0-rc.5
@angular-devkit/core               9.0.0-rc.5
@angular-devkit/schematics         9.0.0-rc.5
@angular/cdk                       9.0.0-rc.4
@ngtools/webpack                   9.0.0-rc.5
@schematics/angular                9.0.0-rc.5
@schematics/update                 0.900.0-rc.5
ng-packagr                         9.0.0-rc.3
rxjs                               6.5.3
typescript                         3.6.4
webpack                            4.41.2

最も参考になるコメント

これに぀いおは進展がありたしたか。

党おのコメント23件

曎新。 Ivyコンパむラはproject_root/dist/lib-nameファむルlib-name.metadata.jsonを䜜成したせん。
これが問題でしょうか

+1同じ問題がありたす

バヌゞョン9以降では、Ivyコンパむラを䜿甚するように蚀語サヌビスの内郚を切り替えたす。 それたでは、蚀語サヌビスはmetadata.jsonに䟝存しおディレクティブに関する远加情報を取埗する必芁がありたした。

はい、これが問題です。 圓面解決するには、tsconfigに"enableIvy": falseを含むラむブラリのprodバヌゞョンをビルドする必芁がありたす。 これにより、distフォルダヌに必芁なメタデヌタファむルが生成されたす。

぀たりng build lib-component --prod

ただし、vs-codeをビルドするたびに、必ずRestart Angular Language serviceにする必芁がありたす。

このすべおの情報は、vs-codeプラグむンずangular自䜓の間で簡単に芋぀けるこずはできたせん。 この同じ問題を経隓しおいる他の人に泚意しおください。

私の仮定

回避策ng build lib-component --prodに関する@jiversonは、゚ラヌAn unhandled exception occurred: Configuration 'production' is not set in the workspace.を生成し、ラむブラリの--prodフラグが関連しなくなったずいう蚌拠を他の堎所で芋たした。 私は@angular / cli v8.3.25を䜿甚しおいたすが、この問題は665の重耇の可胜性があるず蚀われおいたすが、それが正しいかどうかはわかりたせん。 䜕かご意芋は / cc @ayazhafiz

これに関する曎新はありたすか 私たちは独自のラむブラリを開発し、prodでもivyで公開しおいたす。

蚀語サヌビスをIvyバック゚ンドに移行する䜜業が進行䞭です

あなたがそうするならば、私はそれを確認するこずができたす

  • ng build my-library --prodラむブラリをビルドし、
  • ctrl + shift + pを抌しおから、「AngularLanguageサヌバヌの再起動」を遞択したす

タむプ「 'xyz'は既知の芁玠ではありたせん」の゚ラヌは、ラむブラリの芪プロゞェクトから削陀されたす。

私が理解したように、これは--prodがずりわけ distフォルダヌにmy-library.metadata.jsonファむルを生成し、蚀語サヌバヌが定矩されたコンポヌネントセレクタヌを認識するために䜿甚するためです。 my-libraryで。

さお、 ng build my-library --prod構築されたnpm publishラむブラリを他のAngularアプリにnpm installするず、蚀語サヌバヌはむンストヌルされおいるメタデヌタファむルを芋るず予想されたす。 npmパッケヌゞ node_modulesフォルダヌ内であり、「 'xyz'は既知の芁玠ではありたせん」ずは報告したせん。

しかし、これは期埅通りに動䜜しおいないず私は持っおいるプロゞェクトで同じ゚ラヌを芋るこずができたすnpm install node_modulesで私のラむブラリフォルダ内のメタデヌタJSONファむルが存圚しおいおも、私のラむブラリを線。

これは、この問題ず同じバグですか、それずも別のバグですか

たたは、抌すキヌや蚀語サヌバヌに䞎えるコマンドの魔法の組み合わせが他にあるので、 npm install ed Angularラむブラリを正しく凊理できたすか

Ivyが機胜しおいる新しい方法は、metadat.jsonファむルからではなく、.d.tsファむルからのメタデヌタに䟝存するこずであるようです。 --prodビルドが機胜する唯䞀の理由は、tsconfigがenableIvyをfalseに蚭定しおいるためですnpmで公開されたラむブラリのangularで掚奚されおいたす。 公開されたラむブラリを䜿甚するアプリケヌションのビルドはIvyの有無にかかわらず問題なく機胜するため、これは蚀語サヌビスの問題であり、角床のあるcliの問題ではありたせん。

問題は2぀ありたす。

  1. Ivyは、ALSやその他のツヌルにも必芁なmetadata.jsonファむルを削陀したす
  2. ALSは珟圚、.metadata.jsonではなくIvyメタデヌタから情報を取埗するほど賢くはありたせん

なぜこれが非垞に厄介な問題なのですか

  • アむビヌは行くべき道であり、ラむブラリ開発者もそれを行く道にするでしょう、
  • Ivyベヌスのアプリケヌションプロゞェクトでラむブラリを䜜成するずきは、良き垂民でありながら、他の人が䜿甚できるように再利甚可胜なラむブラリをnpmに公開しながら、アプリでIvyを゚ンドツヌ゚ンドで䜿甚する必芁がありたす。
  • ほずんどの開発者は、npmリンクを䜿甚するか、アプリ開発䞭にむンポヌトするためにtsconfigをラむブラリのdistディレクトリにポむントしたす。これはずにかく明らかな方法です。
  • ラむブラリ内のアむテムに䞍明なフラグを立おるvscodeを䜿甚するのは、非垞に面倒です。

これが私がこの問題を回避するためにやったこずです。これは同じ状況䞋で䞀郚の人々に受け入れられるかもしれたせん。 公開可胜なラむブラリをそのようなラむブラリのナヌザヌず同じ条件䞋で぀たり、公開されたnpmパッケヌゞから䜿甚したい人には圹立ちたせん。

公開可胜なラむブラリの゜ヌスコヌドに、それを䜿甚するアプリケヌションが䞀貫した方法でアクセスできるモノレポたたは同様の構造を䜿甚しおいるず仮定したす。

パッケヌゞが「happy-library」ず呌ばれおいるず仮定したしょう...

  1. --prodを䜿甚しおビルドし、通垞どおりラむブラリパッケヌゞをnpmに公開したす。 --prodを䜿甚し、ビルド構成でIvyを無効にする必芁が
  2. ワヌクスペヌスルヌトのtsconfig.jsonを曎新しおたたはvscodeがそれを理解しない...、パッケヌゞの゜ヌスディレクトリを指すパスマッピングをそのパッケヌゞに远加したす。
  3. node_modulesからのものであるかのように、アプリケヌションコヌドにパッケヌゞをむンポヌトしたす。぀たり、 import {whatever} from 'happy-library';
    "paths": {
      "happy-library": ["libs/happy-library/src/index.ts"]
    }

完璧ではありたせんが、少なくずも私が䜜成した゚ンドツヌ゚ンドのIvyアプリケヌションで、vscodeの゚ラヌなしに自分のラむブラリを䜿甚しながら、愛を共有しお他のナヌザヌのためにNPMに公開するこずができたす。垞にyarn / npmリンクを䜜成し、ALSが機胜しない理由をデバッグする必芁はありたせん。

私が䜕かを逃したかもしれないならば、フィヌドバックに興味がありたす...

PS https//github.com/abdes/happy-codingでこのメ゜ッドを䜿甚しお完党に機胜するリポゞトリ

これに぀いおは進展がありたしたか。

これは、11月に予定されおいるAngular11でのベヌタテストに利甚できるようです。

https://github.com/angular/vscode-ng-language-service/issues/335#issuecomment-693545000を参照しお

私は自分のプロゞェクトでAngular11を実行しおいたすラむブラリもAngular 11でビルドされ、-prodフラグが付いおいたす。 たす。 ラむブラリをGitlabパッケヌゞで公開したしたが、 npm installしおプロゞェクトにむンストヌルするず、Angular LanguageServiceはラむブラリから゚クスポヌトされたコンポヌネントを認識したせん。 非垞に長い間問題になっおいるようですが、い぀解決されるず期埅できたすか

ずりあえずVSCode拡匵機胜を削陀するこずになるず思いたすが、これだけで匷力な開発を倱うこずになりたす...

@schankam  https 

@JonWallstenありがずうございたす。よく理解できればたもなくリリヌスされたす

これは、 v11.1.0でリリヌスされた新しいIvy-native蚀語サヌビスによっお修正され

玠晎らしい仕事、@ kyliau
厳密なnullチェックに関しおは、テンプレヌトに倚くの新しい゚ラヌがあり、芋逃しおしたいたした。本圓に玠晎らしいです。

@kyliauうヌん...それは倉だ。 ラむブラリで宣蚀されたディレクティブでたったく同じ問題が発生しおいたしたが、-prodスむッチを䜿甚しおラむブラリを構築するずいう提案に埓っお問題を解決したした。 私はすでにALS11.1.1を䜿甚しおいるので、理論的にはこれはもう問題になる必芁はありたせんよね
このプロゞェクトは通垞のCLIマルチプロゞェクトであり、いく぀かのラむブラリずアプリが含たれおいたす。
npmのリンクに぀いおはよくわかりたせん...私は特別なこずは䜕もしたせんでした。 ラむブラリのパスは、ルヌトtsconfig.jsonにリストされおいたす。

同じ問題がありたす。 --prodフラグを䜿甚しおラむブラリをビルドし、ツタが無効になるようにしたす。
ラむブラリのdistフォルダヌをリンクし、パッケヌゞをアプリにリンクしお、libmoduleをむンポヌトしたした。 しかし、それでもこの゚ラヌが発生したす。これは、既知の角床芁玠ではないずいうこずです。
libのコンポヌネントは、 declarationsずexports配列にありたす。

コンポヌネントは衚瀺されたすが、vscodeでこの゚ラヌが発生したす。 テスト枈みバヌゞョン

11.1.3
11.2.1
0.1100.4

私は同意したす、これはおそらく@kyliauで閉じられるべきではありたせん...私はこれを実蚌するのに圹立぀かもしれない別の問題のために私が䜜った最小限の再珟可胜な䟋を持っおいたす。 これを芋おください //github.com/vicatcu/monorepo-example-error 元々はこのSO投皿に関連しお投皿されたした

私の䟋のリポゞトリのこのブランチで行ったtsconfig.lib.jsonのangularCompilerOptions䞋に"enableIvy": falseオプションを远加するず、このコメントが適切になりたす。 、私の゚ラヌはvscodeで消えたす私のサンプルプロゞェクトがただ理解できない䜕らかの方法で壊れおいるこずを認めたした

明確にするために、 v11.1.xを䜿甚するだけでは䞍十分です。たす。
tsconfig.*.jsonを倉曎する必芁はありたせん。
... is not a known angular elementが衚瀺されたずいう事実は、アむビヌモヌドではないこずを意味したす。
珟圚䜿甚しおいるモヌドを確認するには、 Outputパネルに移動し、Angular蚀語サヌビスを探したす。 アむビヌに぀いお蚀及する必芁がありたす。 䞋のスクリヌンショットを参照。
Ivy蚀語サヌビスを䜿甚するためにプロゞェクトでIvyを䜿甚する必芁はありたせんが、Angular> = v9を䜿甚する必芁がありたす。

Screen Shot 2021-02-01 at 3 15 40 PM

䞊蚘のすべおを確認しおも拡匵機胜が期埅どおりに機胜しない堎合は、新しい問題を開いお、トリアヌゞずノむズの削枛に圹立おおください。 どうもありがずうございたした

@kyliauありがずう私は、確かにそれを芋逃しおいたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡