做者:gauseencss
0. 關於
Vuejs
Vue
(讀音 /vjuː/
,相似於 view
) 是一套用於構建用戶界面的漸進式框架,易用、靈活、高效。項目 | 介紹 |
---|---|
awesome-vue | Vue.js 相關很棒的工具集 |
vue-router | Vue.js 官方的路由管理器 |
vuex | Vue.js 應用的狀態管理工具 |
vue-cli | 一鍵式快速構建 Vue.js 應用開發環境 |
vue-loader | webpack 的 loader ,解析 .vue 文件,它容許你以一種名爲單文件組件 (SFCs)的格式撰寫 Vue 組件 |
vue-server-renderer | 服務端渲染(ssr ) |
vue-rx | 集成 RxJS (處理事件的工具) |
vue-devtools | Vue.js 開發調試工具瀏覽器插件 |
1. 開發規範
2. 建立項目
# 安裝 vue cli yarn global add @vue/cli # 初始化項目 vue create hello-world-3x cd hello-world-3x # 本地運行項目 yarn serve
3. 靜態資源
靜態資源能夠經過兩種方式進行處理:html
JavaScript
被導入或在 template/CSS
中經過相對路徑被引用。這類引用會被 webpack
處理。public
目錄下或經過絕對路徑被引用。這類資源將會直接被拷貝,而不會通過 webpack
的處理。URL
轉換規則前端
URL
是一個絕對路徑 (例如 /images/foo.png),它將會被保留不變。URL
以 .
開頭,它會做爲一個相對模塊請求被解釋且基於你的文件系統中的目錄結構進行解析。URL
以 ~
開頭,其後的任何內容都會做爲一個模塊請求被解析。這意味着你甚至能夠引用 Node 模塊中的資源:URL
以 @
開頭,它也會做爲一個模塊請求被解析。它的用處在於 Vue CLI
默認會設置一個指向 <projectRoot>/src
的別名 @
4.
public
文件夾
public
文件夾的靜態資源都會被複制到 outputDir
對應值的目錄下(默認 'dist'
)。webpack
處理(資源只存在 1 份);webpack
處理,將圖片從新打包到 <outputDir>/<assetsDir>/img/
目錄下,並給圖片加 hash
值,以便更好的控制緩存。資源會存在 2 份(還有第一條複製的 1 份)public
文件夾的靜態資源建議使用絕對路徑,注意配置路徑 publicPath
前綴<img :src="`${publicPath}logo.png`">
data () { return { publicPath: process.env.BASE_URL, } },
5. vue.config.js
<font style="color: #ff9966;">
注:有些 webpack 選項是基於 vue.config.js 中的值設置的,因此不能直接修改。如:你應該修改 vue.config.js 中的 publicPath 選項而不是修改 output.publicPath
</font>vue
做用:設置全部通過 webpack 處理的靜態資源路徑前綴(不包括用絕對路徑引用的資源)node
默認:'/'
webpack
默認狀況下,Vue CLI 會假設你的應用是被部署在一個域名的根路徑上,如:https://domain.com,publicPath
不須要刻意設置。
若是應用被部署在一個子路徑上,你就須要用這個選項指定這個子路徑,如:https://domain.com/my-app/
,那麼 publicPath
爲 /my-app/
。nginx
對於 CSS 相關 loader 來講,咱們推薦使用 css.loaderOptions 而不是直接鏈式指定 loader。這是由於每種 CSS 文件類型都有多個規則,而 css.loaderOptions 能夠確保你經過一個地方影響全部的規則git
// vue.config.js // CSS loader 相關配置 css: { loaderOptions: { stylus: {}, }, }, // webpack 其它配置 chainWebpack: config => { // 配置別名 config.resolve.alias .set('rootDir', path.join(__dirname)) config.module // 添加一個具名規則 方便後期修改 .rule('compile') .test(/\.js$/) .include .add('src') .end() // 甚至能夠建立具名 loader,方便後期修改 .use('babel') .loader('babel-loader') .options({ presets: [ ['@babel/preset-env', { modules: false }] ] }) // 修改具名 loader config.module .rule('compile') .use('babel') .tap(options => newOptions)
6. webpack 配置檢查
vue inspect > output.js # 輸出開發模式下 webpack 配置信息 vue inspect --mode production > output.js # 輸出生產模式下 webpack 配置信息
7. 支持多環境模式打包
場景:有 development、test、preview、production
多種線上環境,每一個環境用到的變量值都不一樣,該怎麼用程序解決?github
vue-cli 3.x
支持多種環境模式變量配置web
.env # 在全部的環境中被載入 .env.local # 在全部的環境中被載入,但會被 git 忽略 .env.[mode] # 只在指定的模式中被載入 .env.[mode].local # 只在指定的模式中被載入,但會被 git 忽略
環境變量優先級:環境變量的文件名 .
越多優先級越高。如:.env.production > .env
默認狀況下 vue-cli 3.x
只支持 3
種模式,分別爲:
development 模式用於 vue-cli-service serve
production 模式用於 vue-cli-service build
test 模式用於 vue-cli-service test:unit 和 vue-cli-service test:e2e
那如何新加模式呢?
能夠經過傳遞 --mode
選項參數爲命令行 vue-cli-service
指定具體環境模式。如:新加 preview
模式
.env.preview
文件,由於每一個模式默認都會將 NODE_ENV
的值設置爲模式的名稱,因此要添加 NODE_ENV=production
變量(preview
模式也是須要打包上傳服務器的)。package.json scripts
文件新增腳本命令
"build:preview": "vue-cli-service build --mode preview"
yarn build:preview
打包編譯便可8. mock 數據之 api 接口管理工具
先後端分離式開發已經很常見了,爲了先後端並行開發,mock
數據(造假數據) 已是個不可避免的問題。 對前端來講 mock
數據的方式有不少種:
Mock.js 模擬數據生成器
mock
數據代碼,比較麻煩mock
代碼,複用率底GUI
可視化界面,不方便後端開發查看接口、字段等 api
信息easy-mock 是一個可視化,而且能快速生成模擬數據的持久化服務
swagger
,可基於 swagger
快速建立項目接口Mock.js
語法RAP 和 RAP2 阿里媽媽出品,開源接口管理工具 RAP
第一代和二代
Mock.js
語法swagger
數據導入,但支持 JSON
格式數據的導入導出YApi 是一個可本地部署的、打通先後端及 QA 的、可視化的接口管理平臺
Response
斷言 Json5
和 Mockjs
定義接口返回數據的結構和文檔swagger、postman、json、har
數據導入9. vue 項目中使用 api 接口管理平臺
// vue.config.js // 基礎地址 const baseApi = '/api' // YApi 項目 ID (YApi 建立項目所得) const mockProjectId = '66666' module.exports = { // 代理 devServer: { proxy: { // 開發環境代理 [`${baseApi}/(?!mock)`]: { target: process.env.VUE_APP_DOMAIN || 'http://test.domain.com', // 測試環境 changeOrigin: true, }, // mock 數據代理 [`${baseApi}/mock`]: { target: 'http://yapi.demo.qunar.com', changeOrigin: true, pathRewrite: { [`${baseApi}/mock`]: `/mock/${mockProjectId}${baseApi}`, }, }, }, }, }
10. 本地預覽打包代碼
http-server 是一個基於 node
,零配置命令行 http
服務器。
# 安裝 yarn add -D http-server # 配置 package.json scripts "scripts": { "preview": "http-server ./ -P", }, # 打包產出 yarn build # 修改文件名 dist/ ===> my-app/(與 publicPath 保持一致) mv -rf dist/ my-app/ # 本地預覽(http://ip:port 可選, 爲代理服務) yarn preview <http://ip:port> # 瀏覽器打開鏈接訪問便可
11. 線上部署
這裏主要講述先後端分離式線上部署
當前應用路由模式分2
種,hash
和 history
模式
hash
模式
URL
有 #
(如:http://localhost:3000/#/a
)#
後面的內容不會傳給服務端URL #
後面的值,不會引發網頁重載history
模式
HTML5
新特性,樣式比較優雅#
(如:http://localhost:3000/a
)#
,全部 domain
後面的內容都會傳給服務端URL
會網頁重載,再次請求服務器,並向 history
棧中插入一條記錄web
服務器前端頁面須要跑在 web
服務器裏面,主要包括 Nginx,Apache,IIS
等,主要處理一些靜態資源。咱們公司使用 Nginx
,下面介紹前端應用部署時 Nginx
的一些配置:
hash
模式配置location ^~ /pos2/ { root /data/www/webproject; index index.html index.htm; }
history
模式配置location ^~ /crmwap/ { root /data/www/webproject; try_files $uri $uri/ /crmwap/index.html =404; # 已知: $document_root = root = /data/www/webproject # 若: try_files $uri $uri/ /crmwap/index.html =404; fall back 以下: # $document_root$uri --> $document_root$uri/ --> $document_root/crmwap/index.html --> nginx 404 # 若:try_files $uri $uri/ /crmwap/index.html; fall back 以下: # $document_root$uri --> $document_root$uri/ --> http://domain.com/crmwap/index.html }
Nginx
經常使用命令
# 啓動 start nginx # 重啓 nginx -s reload # 關閉 nginx -s stop
注:try_files 的最後一個位置(fall back)是特殊的(僅限 root
),它會發出一個內部 「子請求」 而非直接在文件系統裏查找這個文件。
在不更改 Nginx
配置文件的狀況下,前端頁面迭代發佈,不須要重啓 Nginx
服務。
12. 自動化構建工具
歡迎關注公衆號: 學前端