成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vue-項(xiàng)目從本地搭建到線上部署(wǒ shì biaō tí dǎng)

Arno / 2424人閱讀

摘要:放置在目錄下或通過絕對(duì)路徑被引用。對(duì)于相關(guān)來說,我們推薦使用而不是直接鏈?zhǔn)街付āT诓桓呐渲梦募那闆r下,前端頁面迭代發(fā)布,不需要重啟服務(wù)。

作者:gauseen

0. 關(guān)于 Vuejs

簡(jiǎn)介:Vue (讀音 /vju?/,類似于 view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架,易用、靈活、高效。

生態(tài)系統(tǒng)

項(xiàng)目 介紹
awesome-vue Vue.js 相關(guān)很棒的工具集
vue-router Vue.js 官方的路由管理器
vuex Vue.js 應(yīng)用的狀態(tài)管理工具
vue-cli 一鍵式快速構(gòu)建 Vue.js 應(yīng)用開發(fā)環(huán)境
vue-loader webpackloader,解析 .vue 文件,它允許你以一種名為單文件組件 (SFCs)的格式撰寫 Vue 組件
vue-server-renderer 服務(wù)端渲染(ssr)
vue-rx 集成 RxJS (處理事件的工具)
vue-devtools Vue.js 開發(fā)調(diào)試工具瀏覽器插件
1. 開發(fā)規(guī)范

JavaScript Standard

Vue 編碼風(fēng)格規(guī)范

項(xiàng)目目錄規(guī)范

2. 創(chuàng)建項(xiàng)目
# 安裝 vue cli
yarn global add @vue/cli

# 初始化項(xiàng)目
vue create hello-world-3x

cd hello-world-3x

# 本地運(yùn)行項(xiàng)目
yarn serve
3. 靜態(tài)資源

靜態(tài)資源可以通過兩種方式進(jìn)行處理:

JavaScript 被導(dǎo)入或在 template/CSS 中通過相對(duì)路徑被引用。這類引用會(huì)被 webpack 處理。

放置在 public 目錄下或通過絕對(duì)路徑被引用。這類資源將會(huì)直接被拷貝,而不會(huì)經(jīng)過 webpack 的處理。

URL 轉(zhuǎn)換規(guī)則

如果 URL 是一個(gè)絕對(duì)路徑 (例如 /images/foo.png),它將會(huì)被保留不變。

如果 URL. 開頭,它會(huì)作為一個(gè)相對(duì)模塊請(qǐng)求被解釋且基于你的文件系統(tǒng)中的目錄結(jié)構(gòu)進(jìn)行解析。

如果 URL~ 開頭,其后的任何內(nèi)容都會(huì)作為一個(gè)模塊請(qǐng)求被解析。這意味著你甚至可以引用 Node 模塊中的資源:

如果 URL@ 開頭,它也會(huì)作為一個(gè)模塊請(qǐng)求被解析。它的用處在于 Vue CLI 默認(rèn)會(huì)設(shè)置一個(gè)指向 /src 的別名 @

4. public 文件夾

任何放置在 public 文件夾的靜態(tài)資源都會(huì)被復(fù)制到 outputDir 對(duì)應(yīng)值的目錄下(默認(rèn) "dist")。

如果用絕對(duì)路徑來引用,不會(huì)被 webpack 處理(資源只存在 1 份);

如果用相對(duì)路徑來引用,會(huì)被 webpack 處理,將圖片重新打包到 //img/ 目錄下,并給圖片加 hash 值,以便更好的控制緩存。資源會(huì)存在 2 份(還有第一條復(fù)制的 1 份)

所以引用 public 文件夾的靜態(tài)資源建議使用絕對(duì)路徑,注意配置路徑 publicPath 前綴

data () {
  return {
    publicPath: process.env.BASE_URL,
  }
},
5. vue.config.js


注:有些 webpack 選項(xiàng)是基于 vue.config.js 中的值設(shè)置的,所以不能直接修改。如:你應(yīng)該修改 vue.config.js 中的 publicPath 選項(xiàng)而不是修改 output.publicPath

publicPath(同 baseUrl, vue cli 3.3 棄用)

作用:設(shè)置所有經(jīng)過 webpack 處理的靜態(tài)資源路徑前綴(不包括用絕對(duì)路徑引用的資源)

默認(rèn):"/"

默認(rèn)情況下,Vue CLI 會(huì)假設(shè)你的應(yīng)用是被部署在一個(gè)域名的根路徑上,如:https://domain.com,publicPath 不需要刻意設(shè)置。
如果應(yīng)用被部署在一個(gè)子路徑上,你就需要用這個(gè)選項(xiàng)指定這個(gè)子路徑,如:https://domain.com/my-app/,那么 publicPath/my-app/

webpack 配置
vue cli 內(nèi)部配置,是通過 webpack-chain 維護(hù)的,使 webpack 的配置在后期修改起來更方便、簡(jiǎn)單。

對(duì)于 CSS 相關(guān) loader 來說,我們推薦使用 css.loaderOptions 而不是直接鏈?zhǔn)街付?loader。這是因?yàn)槊糠N CSS 文件類型都有多個(gè)規(guī)則,而 css.loaderOptions 可以確保你通過一個(gè)地方影響所有的規(guī)則

// vue.config.js

// CSS loader 相關(guān)配置
css: {
  loaderOptions: {
    stylus: {},
  },
},

// webpack 其它配置
chainWebpack: config => {
    // 配置別名
    config.resolve.alias
      .set("rootDir", path.join(__dirname))
    config.module
    // 添加一個(gè)具名規(guī)則 方便后期修改
      .rule("compile")
        .test(/.js$/)
        .include
          .add("src")
          .end()
        // 甚至可以創(chuàng)建具名 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 # 輸出開發(fā)模式下 webpack 配置信息
vue inspect --mode production > output.js # 輸出生產(chǎn)模式下 webpack 配置信息
7. 支持多環(huán)境模式打包

場(chǎng)景:有 development、test、preview、production 多種線上環(huán)境,每個(gè)環(huán)境用到的變量值都不同,該怎么用程序解決?

vue-cli 3.x 支持多種環(huán)境模式變量配置

.env                # 在所有的環(huán)境中被載入
.env.local          # 在所有的環(huán)境中被載入,但會(huì)被 git 忽略
.env.[mode]         # 只在指定的模式中被載入
.env.[mode].local   # 只在指定的模式中被載入,但會(huì)被 git 忽略

環(huán)境變量?jī)?yōu)先級(jí):環(huán)境變量的文件名 . 越多優(yōu)先級(jí)越高。如:.env.production > .env

默認(rèn)情況下 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 選項(xiàng)參數(shù)為命令行 vue-cli-service 指定具體環(huán)境模式。如:新加 preview 模式

項(xiàng)目根目錄新增 .env.preview 文件,因?yàn)槊總€(gè)模式默認(rèn)都會(huì)將 NODE_ENV 的值設(shè)置為模式的名稱,所以要添加 NODE_ENV=production 變量(preview 模式也是需要打包上傳服務(wù)器的)。

package.json scripts 文件新增腳本命令

"build:preview": "vue-cli-service build --mode preview"

運(yùn)行 yarn build:preview 打包編譯即可

8. mock 數(shù)據(jù)之 api 接口管理工具

前后端分離式開發(fā)已經(jīng)很常見了,為了前后端并行開發(fā),mock 數(shù)據(jù)(造假數(shù)據(jù)) 已經(jīng)是個(gè)不可避免的問題。 對(duì)前端來說 mock 數(shù)據(jù)的方式有很多種:

Mock.js 模擬數(shù)據(jù)生成器

需要前端手動(dòng)去寫 mock 數(shù)據(jù)代碼,比較麻煩

每個(gè)項(xiàng)目都要有一套 mock 代碼,復(fù)用率底

沒有 GUI 可視化界面,不方便后端開發(fā)查看接口、字段等 api 信息

easy-mock 是一個(gè)可視化,并且能快速生成模擬數(shù)據(jù)的持久化服務(wù)

支持可視化界面

支持協(xié)同編輯

支持 swagger,可基于 swagger 快速創(chuàng)建項(xiàng)目接口

支持 Mock.js 語法

支持接口預(yù)覽,等等

免費(fèi)開源,私有化部署簡(jiǎn)單

RAP 和 RAP2 阿里媽媽出品,開源接口管理工具 RAP 第一代和二代

支持可視化界面

支持協(xié)同編輯

支持 Mock.js 語法

不支持 swagger 數(shù)據(jù)導(dǎo)入,但支持 JSON 格式數(shù)據(jù)的導(dǎo)入導(dǎo)出

免費(fèi)開源,但私有化部署相對(duì)繁瑣

YApi 是一個(gè)可本地部署的、打通前后端及 QA 的、可視化的接口管理平臺(tái)

支持可視化界面

支持協(xié)同編輯

支持自動(dòng)化測(cè)試, 對(duì) Response 斷言

基于 Json5Mockjs 定義接口返回?cái)?shù)據(jù)的結(jié)構(gòu)和文檔

支持 swagger、postman、json、har 數(shù)據(jù)導(dǎo)入

免費(fèi)開源,私有化部署簡(jiǎn)單

9. vue 項(xiàng)目中使用 api 接口管理平臺(tái)
// vue.config.js

// 基礎(chǔ)地址
const baseApi = "/api"
// YApi 項(xiàng)目 ID (YApi 創(chuàng)建項(xiàng)目所得)
const mockProjectId = "66666"

module.exports = {
  // 代理
  devServer: {
    proxy: {
      // 開發(fā)環(huán)境代理
      [`${baseApi}/(?!mock)`]: {
        target: process.env.VUE_APP_DOMAIN || "http://test.domain.com", // 測(cè)試環(huán)境
        changeOrigin: true,
      },
      // mock 數(shù)據(jù)代理
      [`${baseApi}/mock`]: {
        target: "http://yapi.demo.qunar.com",
        changeOrigin: true,
        pathRewrite: {
          [`${baseApi}/mock`]: `/mock/${mockProjectId}${baseApi}`,
        },
      },
    },
  },
}
10. 本地預(yù)覽打包代碼

http-server 是一個(gè)基于 node,零配置命令行 http 服務(wù)器。

# 安裝
yarn add -D http-server

# 配置 package.json scripts
"scripts": {
  "preview": "http-server ./ -P",
},

# 打包產(chǎn)出
yarn build

# 修改文件名 dist/ ===> my-app/(與 publicPath 保持一致)
mv -rf dist/ my-app/

# 本地預(yù)覽(http://ip:port 可選, 為代理服務(wù))
yarn preview 

# 瀏覽器打開連接訪問即可
11. 線上部署

這里主要講述前后端分離式線上部署

當(dāng)前應(yīng)用路由模式分2種,hashhistory 模式

hash 模式

樣式比較丑,不太符合人的 “審美”

瀏覽器地址欄 URL# (如:http://localhost:3000/#/a)

# 后面的內(nèi)容不會(huì)傳給服務(wù)端

改變?yōu)g覽器地址欄 URL # 后面的值,不會(huì)引起網(wǎng)頁重載

history 模式

HTML5 新特性,樣式比較優(yōu)雅

瀏覽器地址沒有 # (如:http://localhost:3000/a)

沒有 # ,所有 domain 后面的內(nèi)容都會(huì)傳給服務(wù)端

改變?yōu)g覽器地址欄 URL 會(huì)網(wǎng)頁重載,再次請(qǐng)求服務(wù)器,并向 history 棧中插入一條記錄

具體區(qū)別看這里

web 服務(wù)器

前端頁面需要跑在 web 服務(wù)器里面,主要包括 Nginx,Apache,IIS 等,主要處理一些靜態(tài)資源。我們公司使用 Nginx,下面介紹前端應(yīng)用部署時(shí) 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 常用命令

# 啟動(dòng)
start nginx

# 重啟
nginx -s reload

# 關(guān)閉
nginx -s stop

注:try_files 的最后一個(gè)位置(fall back)是特殊的(僅限 root),它會(huì)發(fā)出一個(gè)內(nèi)部 “子請(qǐng)求” 而非直接在文件系統(tǒng)里查找這個(gè)文件。
在不更改 Nginx 配置文件的情況下,前端頁面迭代發(fā)布,不需要重啟 Nginx 服務(wù)。

12. 自動(dòng)化構(gòu)建工具

Jenkins

歡迎關(guān)注公眾號(hào): 學(xué)前端

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109586.html

相關(guān)文章

  • 命令行神器推薦

    摘要:作為程序員都習(xí)慣在命令行下操作,今天就推薦些命令行神器,可能讓你大開眼界。例太陽出來了,時(shí)間很短。網(wǎng)頁截圖更多用爽截圖命令行工具公眾號(hào)蘇生不惑 作為程序員都習(xí)慣在命令行下操作,今天就推薦些命令行神器,可能讓你大開眼界。 統(tǒng)計(jì)當(dāng)前目錄代碼數(shù) line-counter //https://github.com/MorganZhang100/line-counter //find . -na...

    gekylin 評(píng)論0 收藏0
  • 命令行神器推薦

    摘要:作為程序員都習(xí)慣在命令行下操作,今天就推薦些命令行神器,可能讓你大開眼界。例太陽出來了,時(shí)間很短。網(wǎng)頁截圖更多用爽截圖命令行工具公眾號(hào)蘇生不惑 作為程序員都習(xí)慣在命令行下操作,今天就推薦些命令行神器,可能讓你大開眼界。 統(tǒng)計(jì)當(dāng)前目錄代碼數(shù) line-counter //https://github.com/MorganZhang100/line-counter //find . -na...

    Pikachu 評(píng)論0 收藏1
  • 那些 PHP 開發(fā)者可能用得上的工具

    PHP 函數(shù)的 JavaScript 實(shí)現(xiàn) module.exports = function array_sum (array) { // eslint-disable-line camelcase // discuss at: http://locutus.io/php/array_sum/ // original by: Kevin van Zonneveld (http://kv...

    JowayYoung 評(píng)論0 收藏0
  • ESP8266-NodeMCU項(xiàng)目(四):將上一項(xiàng)目的空調(diào)控制接入小愛同學(xué)(Blinker_APP同

    摘要:錯(cuò)開折騰經(jīng)歷文章目錄前言思路設(shè)備配置程序代碼小愛訓(xùn)練測(cè)試總結(jié)前言之前已經(jīng)進(jìn)行了項(xiàng)目二接入小愛同學(xué)以及項(xiàng)目三空調(diào)控制,接下來便是將二者合一,實(shí)現(xiàn)控制,溫濕度查看,以及小愛同學(xué)進(jìn)行簡(jiǎn)單空調(diào)控制。 ...

    Loong_T 評(píng)論0 收藏0
  • nodejs服務(wù)器部署教程一

    摘要:第一篇教程緊緊讓你輸出一個(gè)環(huán)境介紹服務(wù)器環(huán)境位本地環(huán)境位連接工具安裝和基本配置我的是在阿里云買的,購買的時(shí)候鏡像選擇,現(xiàn)在在搞活動(dòng)比較便宜,我買的香港地區(qū)的不用備案,購買后本地打開,點(diǎn)擊,輸入確定,輸入,然后輸入密碼,會(huì)看到下面的界面連接遠(yuǎn) 第一篇教程緊緊讓你輸出一個(gè)hello world 環(huán)境介紹 服務(wù)器環(huán)境:ubuntu(16.04)64位本地環(huán)境:windows10 64位連接工...

    Hegel_Gu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<