將產品發佈到正式環境
- 最簡單的方法是
ng build - 將所有
dist/
資料夾底下的文件複製一份到伺服器上 - 如果想順帶設置
base href
至<base href="/my/app/">
,則可加下面參數
ng build –base-href=/my/app/ - 若有使用Router功能,將所有找不到的頁面都導向
index.html
(下面會有詳細介紹)
優化我們的Angular專案
加上--prod
參數,會能輸出優化過的檔案
ng build –prod
這個參數會為我們的專案做這些事情
- 改使用AOT編譯:預先編譯而不是用JIT的方式
- 開啟production mode: 可以讓網站執行更快,等同於下這個參數
--environment=prod
- Bundling: 將所有的所使用的library和許多應用綁在一起
- 縮小檔案:刪除多餘的空白,註釋和可選的令牌。
- Uglification:將變數名稱做混淆的動作。
- 消除死代碼:刪除未引用的模塊和很多未使用的代碼
添加--build-optimizer
可進一步減少檔案的大小
ng build –prod –build-optimizer
如果要使用惰性加載去載入部份的JS檔案,記得不要在需要被首先加載的模組裡面import要被惰性加載的元件,否則會在一開始就被載入。
AOT預設在編譯時會對ngModules做識別並且做惰性加載的設定。
善用bundles工具
source-map-explorer是一個很棒的bundles工具。可以將許多的js綑綁在一起。
首先先安裝
npm install source-map-explorer –save-dev
然後建構應用程式
ng build –prod –sourcemaps
在dist生成綑綁包
ls dist/*.bundle.js
運行管理器來生成這個被綑綁的檔案的分析圖
node_modules/.bin/source-map-explorer dist/main.*.bundle.js
產生的圖如下:
善用效能觀察工具
首推的當然就是google chrome囉!
這邊有相關的教學系列文:認識 Chrome 開發者工具
官網也有推薦使用WebPageTest 來衡量自己網頁的速度
伺服器啟用Routee功能的配置方法
Apache設定方式
添加一個重寫規則.htaccess
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ – [L]
# If the requested resource doesn’t exist, use index.html
RewriteRule ^ /index.html
NGinx
使用前端控制器模式Web應用程序中try_files描述的方法 修改為:index.html
try_files $uri $uri/ /index.html;
IIS
添加一個重寫規則web.config
<system.webServer> <rewrite> <rules> <rule name="Angular Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/src/" /> </rule> </rules> </rewrite> </system.webServer>
GitHub Pages
我們無法直接配置GitHub Pages服務器,但是可以添加一個404頁面。複製index.html到404.html。
它仍將作為404響應,但瀏覽器將處理該頁面並正確加載應用程序。從服務docs/上創建一個.nojekyll文件
Firebase hosting
添加一個重寫規則
"rewrites": [ { "source": "**", "destination": "/index.html" } ]