小談angular ng deploy的實現
Angular CLI 在 8.3.0 釋出過一個新命令 ng deploy,可以將 Angular 應用部署到遠端伺服器或雲端儲存上面,例如:Firebase hosting、Azure、GitHub pages 等等,這也是算是 Angular CLI 最後一個將 Angular 應用從開發到部署打通全能選手工具了。
快速入門
這裡我以ng-deploy-oss 為示例,演示如何將 Angular 應用部署到七牛雲。
1、建立一個新專案
ng new hello-world --defaults
2、新增 ng-deploy-oss
ng add ng-deploy-oss
命令列會讓你輸入幾個引數:
? 請選擇雲型別? 七牛雲 ? 請輸入 AccessKey: test ? 請輸入 SecretKey: test ? 所在機房支援: qiniu.zone.Zone_z0 - 華東 ? 請輸入 Bucket: ng-test ? 請輸入路徑字首,如果不指定表示放在根目錄下: ? 請輸入構建生產環境的 NPM 命令列(例如:npm run build),若為空表示自動根據 angular.json 構建生成環境 UPDATE angular.json (3925 bytes) UPDATE package.json (1511 bytes)
3、部署
ng deploy
最後直接開啟瀏覽器,就能直接訪問 ng build --prod 後的效果。
原理
事實上,ng deploy 如同其他 Angular schematics 指令 ng add、ng g 等類同,我曾經在 淺談 Angular Cli Schematics 針對 Schematics 做過介紹。要自定義一個 ng deploy 只需要完成兩個部分:
- 編寫 ng-add 來修改 angular.json 來告知使用哪個 Angular Libary 來部署;
- 編寫上傳動作 createBuilder。
ng-add
給 angular.json 增加 deploy 節點:
{ "serve": {},+ "deploy": { + "builder": "ng-deploy-oss:deploy",+ "options": {} + } }
以及 package.json 的 devDependencies 增加依賴包:
+ "ng-deploy-oss": "~1.0.0",
有興趣可以參考 ng-deploy-oss 的 ng-add 的完整寫法。
createBuilder
它是一個固定的方法:
export default createBuilder<any>(async (schema: {},context: BuilderContext): Promise<BuilderOutput> => { return { success: true }; });
將所有上傳相關的動作寫至該方法內;它返回的是一個 Promise<BuilderOutput>
,要告知 ng deploy 結束務必返回:return { success: true };。
如何部署至不同目標上
目前 ng deploy
只支援單個目標部署,有時多個遠端部署也是剛需,比如像當你在做一個開源時總需要照顧國內、國外時,總是希望一份 gh-pages 和 七牛雲(免費額度),我們只需要修改 angular.json
:
{ "serve": {},+ "deploy-qiniu": { + "builder": "ng-deploy-oss:deploy",+ "options": {} + },+ "deploy-gh-pages": { + "builder": "angular-cli-ghpages:deploy",+ "options": {} + } }
注意:angular-cli-ghpages:deploy 引用的是 angular-cli-ghpages 依賴包。
然後使用 ng run
來呼叫這兩種不同目標:
ng run <project name>:deploy-qiniu ng run <project name>:deploy-gh-pages
結論
Angular 在國內有些小窘境,ng deploy 釋出這麼久,一直都沒見到對國內一些雲端儲存進行適配;事實上,直接利用 ng deploy 來部署應用至遠端伺服器上,可能在越來越多 Docker 應用後變得沒那麼重要,但對於常寫開源的人來說,能夠快速將 Angular 應用部署至國內常見的幾個雲端儲存上還是挺有意義的。
到此這篇關於小談angular ng deploy的實現的文章就介紹到這了,更多相關angular ng deploy內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!