溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Angular怎么編譯打包并使用Docker發(fā)布

發(fā)布時間:2021-06-07 13:43:54 來源:億速云 閱讀:171 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)Angular怎么編譯打包并使用Docker發(fā)布的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

環(huán)境:

  • Angular CLI: 11.0.6

  • Angular: 11.0.7

  • Node: 12.18.3

  • npm : 6.14.6

  • IDE: Visual Studio Code

1. 概要

當我們完成angular的開發(fā)后,如何部署到服務(wù)器呢?【相關(guān)教程推薦:《angular教程》】

2. 編譯打包

2.1. 基本打包命令

基于Angular CLI生成的Angular項目,默認會有2個環(huán)境配置文件

└──myProject/src/environments/
               └──environment.ts
               └──environment.prod.ts
  • environment.ts: 針對開發(fā)環(huán)境使用的環(huán)境文件

  • environment.prod.ts: 生產(chǎn)環(huán)境編譯時,將替換原有的environment.ts,然后再打包。 (根目錄下的angular.json定義了這個默認行為,有需要,可以進行修改)

AngularCLI剛剛生成2個文件后,如果打開比較2個文件的區(qū)別,可以看到開發(fā)環(huán)境使用的environment.ts文件中,有這么一句production: false。因為,針對生產(chǎn)環(huán)境,angular在編譯時需要核心考慮效率等問題,而開發(fā)環(huán)境,要考慮方便開發(fā)者進行調(diào)試,側(cè)重點不同。

那么針對生產(chǎn)環(huán)境如何編譯呢?Angular CLI同樣提供了命令,

ng build --prod

其中,參數(shù)--prod 即告訴編譯環(huán)境,編譯為生產(chǎn)環(huán)境包。同樣,angular.json中定義了默認的編譯參數(shù),如果需要,可以進行修改。主要配置參數(shù)如下

"configurations": {
    "production": {
        "fileReplacements": [
        {
            "replace": "src/environments/environment.ts",
            "with": "src/environments/environment.prod.ts"
        }
        ],
        "optimization": true,
        "outputHashing": "all",
        "sourceMap": false,
        "extractCss": true,
        "namedChunks": false,
        "aot": false,
        "extractLicenses": true,
        "vendorChunk": false,
        "buildOptimizer": false,
        "budgets": [
        {
            "type": "initial",
            "maximumWarning": "5mb",
            "maximumError": "10mb"
        }
        ]
    }
}

Angular默認打包到根目錄下的dist目錄下,生成的文件為純靜態(tài)文件(html, css, js),以及圖片文件。

2.2. 打包部署到二級目錄

有不少情況,我們的angular web站點不能直接部署到網(wǎng)站的根目錄下,需要部署到二級目錄下。 比如,不能部署到 http://abc.com下,要求部署到 http://abc.com/demo 這個二級目錄下。針對這種情況,就需要修改一下我們的編譯參數(shù),修改為:

ng build --prod --deploy-url /demo/ --base-href /demo/

增加 --deploy-url--base-href

使用場景:比如我們有多個站點,希望使用同一個反向代理, http://site1, http://site2, 分別映射到 http://abc.com/site1, http://abc.com/site2/。 那么為了方便配置,需要把site1, site2都部署到二級目錄,如http://site1/site1, http://site2/site2。 然后 http://site1/site1代理到http://abc.com/site1, http://site2/site2代理到http://abc.com/site2/, 免得css、js因為目錄級別問題找不到。

3. Angular站點的發(fā)布

Angular站點編譯打包后,可以方便的發(fā)布到已有web服務(wù)器,或者打成docker image, 然后發(fā)布。

3.1. web服務(wù)器發(fā)布

因為我們打包后,生成的文件為純靜態(tài)文件(html, css, js, 圖片等), 所以打包后的問題,可以直接copy到iis, nginx , apache tomcat等web服務(wù)器,或者node.js, java等可以顯示靜態(tài)文件的程序的目錄下即可。

3.2. 使用docker發(fā)布

如果部署到docker,我們可以基于一個基礎(chǔ)的nginx docker, 然后把編譯好的angular項目,copy到docker 內(nèi)的nginx目錄下即可。

基本步驟:

  • 準備Dockerfile 文件, docker可以基于nginx:alpine, 將編譯好的angular 站點文件復(fù)制到 docker 的nginx默認目錄 /usr/share/nginx/html

FROM nginx:alpine
COPY . /usr/share/nginx/html

說明: 1) 假設(shè)angular打包后的文件,與Dockerfile文件在同一個目錄
2) COPY . /usr/share/nginx/html, 兩個參數(shù) . 代表當前路徑, /usr/share/nginx/html是docker中的目標目錄

  • 編譯docker。 在Dockerfile目錄下,執(zhí)行

docker build -t your-docker-name .
docker save your-docker-name > your-docker-name.tar
gzip your-docker-name.tar

三條命令分別為:

  • 生成docker image, 名字(name)為your-docker-name

  • 導(dǎo)出docker image為本地文件, 文件名為 your-docker-name.tar

  • 壓縮docker image

可以看到,因為angular編譯后為純靜態(tài)文件,所以使用docker發(fā)布非常簡單。部署時,只需要復(fù)制docker文件到目標機器,解壓縮,然后執(zhí)行 docker load < your-docker-name.tar 即可加載docker image到目標機器。

4. 總結(jié)

  • 為生產(chǎn)環(huán)境編譯,一定要加參數(shù)--prod

  • 如果要部署到二級目錄,編譯時加參數(shù)。如部署到/demo二級目錄下,加參數(shù): --deploy-url /demo/ --base-href /demo/

  • 使用docker發(fā)布,可以選擇基本的nginx docker, 然后將編譯好的angular文件copy到nginx目錄下即可。

感謝各位的閱讀!關(guān)于“Angular怎么編譯打包并使用Docker發(fā)布”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI