CLIでコンポーネントを削除する最良の方法は何ですか


227

「ng destroy component foo」を使用してみましたが、「destroyコマンドはAngular-CLIでサポートされていません」と表示されます

Angular CLIでコンポーネントを適切に削除するにはどうすればよいですか?


2
CLIではまだサポートされていませんが、コンポーネントを作成する前に古い変更がgitコミットされていることを確認した場合は、新しいファイルを削除して、変更されたファイル(または単にgit checkout src)に対してgit checkoutを実行できます。
Sanjay Verma

それは巧妙なハックです。Angularチームは、遅かれ早かれこの問題に対処する必要があります。彼らは現在他の問題で忙しいと思います。しかし、当分の間、私たちはあなたの解決策と一緒に生きなければならないと思います。これを回答として投稿してください。@SanjayVerma
アマン

回答:


167

destroyまたは同様のものがCLIに登場する可能性がありますが、現時点では主な焦点ではありません。したがって、これを手動で行う必要があります。

コンポーネントディレクトリを削除し(使用しなかった場合--flat)、NgModule宣言されているから削除します。

どうすればよいかわからない場合は、現在のgit変更がないことを意味する「クリーン」なアプリをお勧めします。次に、コンポーネントを生成し、リポジトリで変更された内容を確認します。これにより、コンポーネントを削除するために必要なことをそこからバックトラックできます。

更新

生成したいものについて実験しているだけの場合は、--dry-runフラグを使用してディスク上にファイルを作成せずに、更新されたファイルリストを確認できます。


132
  1. このコンポーネントを含むフォルダを削除します。
  2. app.module.tsで、このコンポーネントのインポート文を削除し、@ NgModuleの宣言セクションからその名前を削除します
  3. このコンポーネントのexportステートメントを含む行をindex.tsから削除します。

12
index.tsはどこにありますか?ありがとう
シェーンG

40
CLIの最新バージョンでは生成されません。
Yakov Fain 2017年

7
もう1つ足りないステップがあると思います...もう一度ng serveを実行してください。
gsalgadotoledo 2017


2
アプリ-routing.module.tsからのインポート文削除するAngular6で、必要性
新米

26

Angular CLIの使用はまだサポートされていないため

そのため、ここでは可能な方法です。その前に、CLI(例ng g c demoComponent)を使用してコンポーネント/サービスを作成するとどうなるかを確認してください。

  1. demoComponentng g c demoComponent)という名前の別のフォルダーが作成されます。
  2. これはHTML,CSS,tsspecdemoComponent専用のファイルを生成します。
  3. また、app.module.tsファイル内に依存関係を追加して、そのコンポーネントをプロジェクトに追加します。

逆の順序で行います

  1. 依存関係を削除 app.module.ts
  2. そのコンポーネントフォルダを削除します。

依存関係を削除するときは、2つのことを行う必要があります。

  1. app.module.tsファイルからインポート行参照を削除します。
  2. app.module.tsの@NgModule宣言配列からコンポーネント宣言を削除します。

11

Visual Studio Codeを使用して、コンポーネントフォルダーを削除し、プロジェクトエクスプローラー(左側)で赤に着色されたファイルを確認します。これは、ファイルが影響を受け、エラーが発生したことを意味します。各ファイルを開き、コンポーネントを使用するコードを削除します。


11

現在、Angular CLIはコンポーネントを削除するオプションをサポートしていません。手動で削除する必要があります。

  1. app.moduleからすべてのコンポーネントのインポート参照を削除します
  2. コンポーネントフォルダを削除します。
  3. また、app.module.tsファイルの@NgModule宣言配列からコンポーネント宣言を削除する必要があります

5

以下のYakov Fainによって書かれたプロセスを自動化するbashスクリプトを書きました。./removeComponent myComponentNameのように呼び出すことができます。これはAngular 6でのみテストされています

#!/bin/bash
if [ "$#" -ne 1 ]; then
    echo "Input a component to delete"
    exit 1
fi

# finds folder with component name and deletes
find . -type d -name $1 | xargs rm -rf

# removes lines referencing the component from app.module.ts
grep -v $1 app.module.ts > temp
mv temp app.module.ts

componentName=$1
componentName+="Component"

grep -v -i $componentName app.module.ts > temp
mv temp app.module.ts

将来的に角度が変化する場合は、これを変更するためのメモを追加してください
Aidan Grimshaw

3

それが最善の方法かどうかはわかりませんが、うまくいきました。

  • まず、コンポーネントフォルダを削除しました。
  • 次に、削除したいコンポーネントに関連するインポートと宣言のapp.module.ts、app.component.tsおよびapp.component.htmlをクリアしました。
  • 同様に、main.tsをクリアしました。

アプリを保存して更新したところ、うまくいきました。


3

Angular 2+の回答

from imports and declaration arrayapp.modules.tsのコンポーネントを削除します 。

次に、その参照が他のモジュールに追加されていることを確認します。追加されている場合は削除して

最後delete that component Manuallyにアプリから、あなたは完了です。

または、逆の順序で行うこともできます。


2

app.module.tsから:

  • 特定のコンポーネントのインポート行を消去します。
  • @NgModuleからその宣言を消去します。

その後、削除するコンポーネントとその付属ファイル(フォルダの削除.component.ts.component.html.component.cssおよび.component.spec.ts)を。

できました。

-

main.tsから消去することについて人々が言っ​​ているのを読みました。AppModuleはすでにインポートされているため、そもそもそこからインポートする必要はありませんでした。AppModuleは、作成したすべてのコンポーネントをインポートするものです。


2

スペックファイルに誤りがあるAngular 6ディレクティブを削除する必要がありました。問題のファイルを削除し、そのファイルへの参照をすべて削除してアプリを再構築した後でも、TSは同じエラーを報告していました。私のために働いたのはVisual Studioを再起動することでした-これはエラーと古い不要なディレクティブのすべてのトレースをクリアしました。


0

まず、コンポーネントフォルダーを削除します。コンポーネントフォルダーを削除してから、「ts」ファイルに作成したエントリーを削除します。


0

CLIでコマンドを探している場合、今のところansはNOです。ただし、コンポーネントフォルダとすべての参照を削除することにより、手動で行うことができます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.