การใช้งาน Angular CLI พื้นฐาน (ตอนที่ 2)
ฟีเจอร์ต่างๆ ของ Angular CLI และการ Build โปรเจค พร้อมความรู้สึกหลังจากใช้งาน
หลัังจากที่ได้เรียนรู้วิธีการสร้าง Angular CLI ในตอนที่ 1 เรียบร้อยแล้ว ตอนที่ 2 จะกล่าวถึงฟีเจอร์ต่างๆ ที่ติดมากับ Angular CLI ว่าทำอะไรได้อีกบ้าง เรามาเริ่มกันเลย..
มีอะไรบ้าง
- Generating Features
- วิธีการเพิ่มไฟล์ CSS, JavaScript ลงใน Angular CLI
- ng test คืออะไร
- วิธีการ Build โปรเจค
- ความรู้สึกหลังใช้
Generating Features
คำสั่งที่ใช้ในการสร้าง คือ ng generate <feature><options>
ซึ่งสามารถสร้างส่วนต่างๆ ได้ดังนี้
- Component
ng generate component contact
เมื่อมี Component ใหม่เกิดขึ้น เราต้องทำการ Import Component เข้าไปในไฟล์ module.ts เพื่อที่จะทำความรู้จักกับทั้งโปรเจค แต่ Angular CLI นั้นจะทำการ import ให้อัตโนมัติโดยที่เราไม่ต้องไปเขียนโค้ด Import เอง… เจ๋ง!
Option
สร้าง Component ที่เป็น inline template คือจะไม่มีไฟล์ .html
ng g c COMPONENT-NAME — it
สร้าง Component ที่เป็น inline style คือจะไม่มีไฟล์ .css / .sass / .scss
ng g c COMPONENT-NAME — is
2. Directive
ng generate directive btnDelete
Angular Cli จะสร้างไฟล์ใหม่ทั้งหมด 2 ไฟล์ด้วยกัน คือ
└── btn-delete.directive.spec.ts└── btn-delete.directive.ts
และจะทำการ Import Class ให้อัตโนมัติ ในไฟล์ app.module เช่นเดียวกัน
Option
ทำการสร้างโฟลเดอร์ชื่อ btnComfirm2 และในโฟลเดอร์จะประกอบด้วยไฟล์ directive 2 ไฟล์
ng g d btnConfirm2 –flat false
เปลี่ยนคำนำหน้าใน selector จาก app เป็น my
ng g d btnConfirm2 –prefix my
3. Service
ng generate service contactData
Angular CLI จะสร้างไฟล์ใหม่ทั้งหมด 2 ไฟล์ด้วยกัน แต่จะมี Waring เตือนว่ายังไม่ได้กำหนด Provided ให้กับแอพพลิเคชั่น ซึ่งเราสามารถเพิ่ม Provided ได้ในไฟล์ app.module โดยการ import service เข้าไปและเรียกใช้ใน NgModule Providers ตามรูปด้านล่าง
แต่หากต้องการให้ Angular CLI เพิ่มการ Import ให้อัตโนมัตินั้นก็สามารถทำได้เช่นกัน โดยใช้คำสั่ง
ng g s contactData2 –m app.module
Option จะเหมือนกันกับการสร้าง Directive
4. Pipes
ng generate pipe ConverToInches
Angular Cli จะสร้างไฟล์ใหม่ทั้งหมด 2 ไฟล์ด้วยกัน คือ
└── convert-to-inches.pipe.spec.ts└── convert-to-inches.pipe.ts
และจะทำการ Import Class ให้อัตโนมัติ ในไฟล์ app.module
Option จะเหมือนกันกับการสร้าง Directive
5. Interface, Enumeration และ Class
ng generate interface personng generate enum directionng generate class contact
Angular CLI จะสร้างไฟล์ให้ 1 ไฟล์ตามประเภทที่เรา Generate หากต้องการให้ไฟล์อยู่ภายใต้โฟลเดอร์ที่ต้องการ สามารถสร้างได้ดังนี้
ng generate class model/contact
6. Module
ng generate module admin หรือ ng g m admin
Angular CLI จะทำการสร้างโฟลเดอร์และสร้างไฟล์ใหม่ให้อัตโนมัติ ต่อไปหากต้องการสร้าง Component เข้าไปในโฟลเดอร์ admin ก็ใช้คำสั่ง
ng g c admin
Angular CLI ก็จะทำการสร้างไฟล์ component ให้อัตโนมัติ 4 ไฟล์ด้วยกัน รวมไปถึง จะทำการ Import ตัว Class Component ลงใน admin.module ให้อัตโนมัติอีกด้วย
วิธีการเพิ่มไฟล์ CSS, JavaScript ลงใน Angular CLI
เราสามารถเพิ่มไฟล์ CSS หรือ JavaScript ที่เราสร้างขึ้นเองได้โดยการใส่ Path เข้าไปในไฟล์ .angular-cli.json
เมื่อทำการ Run โปรเจคขึ้นมา ไฟล์ที่เราได้เพิ่มเข้าไปใหม่จะสามารถใช้งานได้ทันที
ng test คืออะไร
เราจะเห็นไฟล์ที่เป็นสกุล spec.ts เกือบทั้งหมด ไฟล์นี้จะใช้เพื่อเขียน Test ในการพัฒนาแบบ TDD (Test Driven-Development) กับ Component แต่ละตัว ซึ่ง Angular CLI เลือกใช้ JavaScript Framework สำหรับการ Test อย่าง Jasmine และระบบ Task Runner อย่าง Karma ในการทำงาน และจะทำการตรวจสอบไฟล์ทุกครั้งที่มีการแก้ไข
วิธีการ Build โปรเจค
แน่นอนว่าหากเราพัฒนาโปรเจคอันสุดคูลของเราเรียบร้อยแล้ว ขั้นตอนต่อไปก็คือการ Build โปรเจคเพื่อเอาไปใช้งานหรือเอาไปให้ Tester ทำการ Test โปรเจค วิธีการ Build มี 2 แบบคือ
- Development Mode
ng build --environment=devng build --e=devng build
2. Production Mode
ng build --environment=prodng build --e=prod
เมื่อ Run คำสั่ง Build โปรเจค — Angular CLI จะทำการสร้างไฟล์ Bundle ต่างๆ (จาก Webpack) ซึ่งจะเก็บไว้ในโฟลเดอร์ dist/
หาก Run คำสั่งเดิมอีกครั้ง โฟลเดอร์ dist/
ที่มีอยู่จะถูกลบและสร้างขึ้นมาใหม่
การ Build ระหว่าง -dev กับ –prod แตกต่างกันอย่างไร
- -dev จะมีการสร้างไฟล์ map ขึ้นมาแต่ -prod ไม่มี
- -dev จะไม่มีการ Build ไฟล์ CSS
- -dev จะมีขนาดไฟล์ที่ใหญ่กว่า -prod เพราะ -prod mode นั้นจะทำการ minify ที่เป็นไฟล์ JavaScript, TypeScript, SASS, และ LESS
ความรู้สึกหลังใช้
ส่วนตัวผมชอบมากๆ เลยนะครับ เพราะมีฟีเจอร์ที่ใช้งานหลากหลาย ทำให้เราพัฒนาแอพลิเคชั่นที่เขียนด้วย Angular ได้เร็วยิ่งขึ้น ไม่ว่าจะเป็นการสร้าง Component สร้าง Service ที่มีฟอร์เมตมาให้เหมือนกัน ทำให้ไฟล์ทุกไฟล์เราเป็นมาตรฐานเดียวกัน และรวมไปถึงการสั่ง Build Project การ Test Project ด้วย Karma เป็นต้น ไม่ต้องหา Dependency ให้เหนื่อย