ngカスタムファイル、コンポーネントをcliで生成する
従来のコピーテープと比べて、モジュール、コンポーネントを作成するためにアングラーcliの足場機能を使用すると非常に効率的です.ファイルを作成するだけでなく、必要なコードも含まれています.また、最近のモジュールを導入しました.いくつかの重複作業はcliを使って節約できます.アングラーは豊富なファイルタイプを提供していますが、いずれにしても自分達のプロジェクトの必要性があります.ユーザー定義の拡張子のコンポーネントを作る必要があります.この時はcliを捨てなければなりません.カスタマイズした方式を使って足場を作ってもいいですか?
1.アングラー足場の作成方式
angglar文書を見ると、この言葉が見られます.
それなら、angglarが 考えてみます.Cliを実行してコンポーネントを作る時に、ここのテンプレートを使って、fileフォルダの中のファイルでプロジェクトのコンポーネントを作ります.他のはともかく、私たちはここの
2.カスタム原理図
まず私達の需要を見てください.私達は今プロジェクトの中で、ページはpageです.angglarのもとの書き方によって、すべてのpageのコンポーネントは全部
次に、pageの下のfilesフォルダのファイル名 page files index.d.ts index.jsコマンドが実行されると、このjsファイル が実行されます. schema.d.ts schema.jsonは、このジェネレータコマンドが許容できるパラメータ を定義している.
次にpageの中の
このようなところでは、対応するコンポーネントファイルと内部のコンポーネントクラスを作成することを発見しました.したがって、
次に
これは生成されたコンポーネントのtsテンプレートです.まずファイルの中のクラスです.今のファイル名は
OKです.これまで私たちの「原理図」はほぼ作成されました.私たちは今cliコマンドに参加します.
私たちは私たち自身の命令を作成します.
3.試験コマンド
これまで、私たちは自分たちの生成コマンドを追加しました.これからは、
More than one module matches.Use skyp-mport option to skyp impoting the component into the closest module.
二つの解決方法:1.
ですから、私の命令はng_page pages/user/login--module=./pages/main/main.moduleで、結果を確認します.
生成したtsファイルを見てください.
とてもいいです.私たちの需要を満たします.
すみません、プロジェクトではlessを使っています.しかも
私達のカスタムのlessを識別していないかもしれませんが、カスタムのlessはどうやって決めますか?
つまり、私たちはここで
もう一度生成します
1.アングラー足場の作成方式
angglar文書を見ると、この言葉が見られます.
Schematic
という意味です.Schematic
は足場ライブラリであり、プログラム項目を作成、修正、再構成、または移動ファイルおよびコードによって生成または変換する方法を定義する.Anglar Cliは、原理図を用いてプロジェクトファイルを生成し、修正する.ライブラリ開発者は、Cliがリリースされたライブラリを生成できるように原理図を作成することができる.表示できますhttps://www.npmjs.com/package/@angglar-devkit/schematicas.それなら、angglarが
Schematic
を借りてプロジェクトファイルを生成していることが分かります.また、node_module
の中に@Schematics/angular
があります.私たちがcliを使って生成できるすべてのファイルを定義しています.components\class\enum\interface
などがあります.components
をチェックしてください.中にはtsファイルがあります.filesフォルダがあります.中には私たちがcomponentを生成するすべてのファイルが含まれています.__name@dasherize@if-flat__
__name@dasherize__.component.__styleext__
__name@dasherize__.component.html
__name@dasherize__.component.spec.ts
__name@dasherize__.component.ts
components
によって自分たちの「原理図」を作ってもいいですか?2.カスタム原理図
まず私達の需要を見てください.私達は今プロジェクトの中で、ページはpageです.angglarのもとの書き方によって、すべてのpageのコンポーネントは全部
XXXX.component.ts
です.私たちはページとコンポーネントを区別するために、ページのファイルは全部XXX.page.ts
です.まずnode_module/@Schematics/angula/
の下でcomponent
をコピーしてpage
を新たに作ってみます.次に、pageの下のfilesフォルダのファイル名
.component
を.page
に変更します..spec.ts
__name@dasherize@if-flat__
__name@dasherize__.page.__styleext__
__name@dasherize__.page.html
次にpageの中の
__name@dasherize__.page.ts
を見ます.このjsファイルは私達が自分の命令を実行する時に実行します.このファイルを見てください.中のコードはちょっと分かりませんが、当ててもいいです.鍵があります.1
2
3
4
5
const componentPath = `/${options.path}/`
+ (options.flat ? '' : core_1.strings.dasherize(options.name) + '/')
+ core_1.strings.dasherize(options.name)
+ '.component';
const classifiedName = core_1.strings.classify(`${options.name}Component`);
このようなところでは、対応するコンポーネントファイルと内部のコンポーネントクラスを作成することを発見しました.したがって、
index.js
と.component
のすべての場所を}Component
と.page
に置き換えます.1
2
3
4
5
const componentPath = `/${options.path}/`
+ (options.flat ? '' : core_1.strings.dasherize(options.name) + '/')
+ core_1.strings.dasherize(options.name)
+ '.page';
const classifiedName = core_1.strings.classify(`${options.name}Page`);
次に
}Page
を見ます.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Component, OnInit, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: '',
template: `
works!
`,
templateUrl: './.component.html',
styles: []
styleUrls: ['./.component.'],
encapsulation: ViewEncapsulation.,
changeDetection: ChangeDetectionStrategy.
})
export class Component implements OnInit {
constructor() { }
ngOnInit() {
}
}
これは生成されたコンポーネントのtsテンプレートです.まずファイルの中のクラスです.今のファイル名は
page/files/__name@dasherize__.page.ts
ですから、中のクラスもXXX.page.ts
形式が必要です.そして、私たちのページは命令として現れてはいけないので、XXXPage
メタデータを削除します.総合して、私たちのselector
は次のように修正すべきです.1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Component, OnInit, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
@Component({
templateUrl: './.page.html',
styles: []
styleUrls: ['./.page.'],
encapsulation: ViewEncapsulation.,
changeDetection: ChangeDetectionStrategy.
})
export class Page implements OnInit {
constructor() { }
ngOnInit() {
}
}
OKです.これまで私たちの「原理図」はほぼ作成されました.私たちは今cliコマンドに参加します.
__name@dasherize__.page.ts
においてcliの命令が定義されています.同様に、まずcompnetの命令を観察します.1
2
3
4
5
6
"component": {
"aliases": [ "c" ], //
"factory": "./component", //
"description": "Create an Angular component.",
"schema": "./component/schema.json"
},
私たちは私たち自身の命令を作成します.
1
2
3
4
5
6
"component": {
"aliases": [ "pa" ], //
"factory": "./page", //
"description": "Create an Angular component page.",
"schema": "./page/schema.json"
},
3.試験コマンド
これまで、私たちは自分たちの生成コマンドを追加しました.これからは、
@Schematics/angular/collection.json
の下にコンポーネントapp/pages/user
を生成するように試みます.コマンド:user-test
、結果を参照してください.More than one module matches.Use skyp-mport option to skyp impoting the component into the closest module.
二つの解決方法:1.
ng g page pages/user/user-test
2.ng_page pages/user/login--module=ap.moduleは自分のmoduleがpageの中にあるからです.ですから、私の命令はng_page pages/user/login--module=./pages/main/main.moduleで、結果を確認します.
1
2
3
4
CREATE src/app/pages/user/user-test/user-test.page.css (0 bytes)
CREATE src/app/pages/user/user-test/user-test.page.html (28 bytes)
CREATE src/app/pages/user/user-test/user-test.page.ts (239 bytes)
UPDATE src/app/pages/user/user.module.ts (1803 bytes)
生成したtsファイルを見てください.
1
2
3
4
5
6
7
8
9
10
import { Component, OnInit } from '@angular/core';
@Component({
templateUrl: './user-test.page.html',
styleUrls: ['./user-test.page.css']
})
export class UserTestPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
とてもいいです.私たちの需要を満たします.
すみません、プロジェクトではlessを使っています.しかも
ng g page pages/user/user-test --skip-test
を使って作成したコンポーネントの中のスタイルファイルは全部lessです.なぜ私達がカスタマイズしたのはcssファイルですか?私達のカスタムのlessを識別していないかもしれませんが、カスタムのlessはどうやって決めますか?
component
ファイルの中にangular.json
があります.1
2
3
4
5
"schematics": {
"@schematics/angular:component": {
"styleext": "less"
}
},
つまり、私たちはここで
project
コンポーネントを生成するとき、component
はstyleext
です.私たちのless
コマンドは配置されていないので、デフォルトのスタイルファイルのサフィックスを探します.ここで試してみます.1
2
3
4
5
6
7
8
"schematics": {
"@schematics/angular:component": {
"styleext": "less"
},
"@schematics/angular:page": {
"styleext": "less"
}
},
もう一度生成します
1
2
3
4
CREATE src/app/pages/user/user-test/user-test.page.less (0 bytes)
CREATE src/app/pages/user/user-test/user-test.page.html (28 bytes)
CREATE src/app/pages/user/user-test/user-test.page.ts (240 bytes)
UPDATE src/app/pages/user/user.module.ts (1804 bytes)