如何用vue-cli4.0構建多頁面模板腳手架!?本文實戰教你

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/06/18/13156378.html
-Advertisement-
Play Games

multipage Github地址 github.com/qinouz/mult…基於 vue-cli4.0 構建 多頁面 模板腳手架! 啟動項目 git clone https://github.com/qinouz/multipage.git cd multipage npm install ...


multipage

Github地址 github.com/qinouz/mult…
基於 vue-cli4.0 構建 多頁面 模板腳手架!

啟動項目


git clone https://github.com/qinouz/multipage.git

cd multipage

npm install

npm run dev
複製代碼

目錄

✅ 生成多頁面配置

build/newUtils.js 里的 getEntry方法 根據目錄下的 所有html文件生成頁面路徑以及對應html的對象。
var pages = utils.getEntry(['./src/module/**/*.html']);

返回結果為:

{ 'aa/as/dd/fd/ddd': './src/module/aa/as/dd/fd/ddd/ddd.html',
   'aa/ddd': './src/module/aa/ddd/ddd.html',
   'ss': './src/module/ss/ss.html' 
 }另外我搞前端開發9年了。如果大家有問題或者交流經驗可以來我的扣扣裙 519293536 找 我 都會儘力幫大家哦
getEntryPages 方法 var mpages = utils.getEntryPages(pages); 生成最終多頁面配置,目錄結構需要按照一定規則, 文件夾名與主文件名以及模板html 文件名 必須要一致,層級結構不限制。
  ├── module
  │   └── ss
  |   |   └── ss.html
  |   |   └── ss.js
複製代碼

返回結果為:

{ 'aa/as/dd/fd/ddd':{ entry: './src/module/aa/as/dd/fd/ddd/ddd.js',
     template: './src/module/aa/as/dd/fd/ddd/ddd.html' },
  'aa/ddd':{ entry: './src/module/aa/ddd/ddd.js',
     template: './src/module/aa/ddd/ddd.html' },
  ss:{ entry: './src/module/ss/ss.js',
     template: './src/module/ss/ss.html' } }
複製代碼

✅ 配置多環境變數

package.json 里的 scripts 配置 dev qa prd,通過 --mode xxx 來執行不同環境

  • 通過 npm run dev 啟動本地 , 執行 development
  • 通過 npm run qa 打包測試 , 執行 staging
  • 通過 npm run prd 打包正式 , 執行 production
"scripts": {
  "dev": "vue-cli-service serve --open",
  "stage": "vue-cli-service build --mode staging",
  "build": "vue-cli-service build",
}
複製代碼
配置介紹

  以 VUE_APP_ 開頭的變數,在代碼中可以通過 process.env.VUE_APP_ 訪問。   比如,VUE_APP_ENV = 'development' 通過process.env.VUE_APP_ENV 訪問。   除了 VUE_APP_* 變數之外,在你的應用代碼中始終可用的還有兩個特殊的變數NODE_ENV 和BASE_URL

在項目根目錄中新建.env.*

  • .env 本地開發環境配置
NODE_ENV = development
VUE_APP_SERVICE_URL =
BASE_URL = ./

複製代碼
  • .env.qa 測試環境配置
NODE_ENV = production
VUE_APP_SERVICE_URL = http://www.baidu.com
BASE_URL = /shopsystem/static/weixin/dist/
複製代碼
  • .env.prd 正式環境配置
 NODE_ENV = production
 VUE_APP_SERVICE_URL = http://www.baidu.com
 BASE_URL = /shopsystem/static/weixin/dist/
複製代碼

配置對應環境的變數,拿本地環境文件 .env 舉例,用戶可以根據需求修改

// 本地環境配置
NODE_ENV = development
VUE_APP_SERVICE_URL =
VUE_APP_TEST=test
BASE_URL = ./

複製代碼

根據環境不同,變數就會不同了

// 根據環境不同引入不同baseApi地址
const instance = axios.create();
var path = process.env.VUE_APP_SERVICE_URL;
instance.defaults.baseURL = path;
複製代碼

▲ 回頂部

✅ rem 適配方案

不用擔心,項目已經配置好了 rem 適配, 下麵僅做介紹:

Vant 中的樣式預設使用px作為單位,如果需要使用rem單位,推薦使用以下兩個工具:

PostCSS 配置

下麵提供了一份基本的 postcss 配置,可以在此配置的基礎上根據項目需求進行修改

// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
  plugins: {
    postcss: {
      plugins: [
        require('postcss-pxtorem')({
          rootValue: 37.5, // 換算的基數
          selectorBlackList: [], // 忽略轉換正則匹配項
          propList: ['*'],
        }),
      ]
    }
  }
}
複製代碼

▲ 回頂部

父組件改變子組件樣式 深度選擇器

當你子組件使用了 scoped 但在父組件又想修改子組件的樣式可以 通過 >>> 來實現:

<style scoped>
.a >>> .b { /* ... */ }
.a {
    /deep/ .b {
        ...
    }
}
</style>
複製代碼

▲ 回頂部

✅ Vuex 狀態管理

目錄結構

├── store
│   ├── modules
│   │   └── app.js
│   ├── index.js
│   ├── getters.js
複製代碼

main.js 引入

import Vue from 'vue'
import App from './App.vue'
import store from './store'
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
複製代碼

使用

<script>
  import {mapGetters} from 'vuex'
  export default {
    computed: {
      ...mapGetters(['userName'])
    },

    methods: {
      // Action 通過 store.dispatch 方法觸發
      doDispatch() {
        this.$store.dispatch('setUserName', '真乖,趕緊關註公眾號,組織都在等你~')
      }
    }
  }
</script>
複製代碼

▲ 回頂部

✅ Vue-router

本案例採用 hash 模式,開發者根據需求修改 mode base

註意:如果你使用了 history 模式,vue.config.js 中的 publicPath 要做對應的修改

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)
export const router = [
  {
    path: '/',
    name: 'index',
    component: () => import('@/views/home/index'), // 路由懶載入
    meta: {
      title: '首頁', // 頁面標題
      keepAlive: false // keep-alive 標識
    }
  }
]
const createRouter = () =>
  new Router({
    // mode: 'history', // 如果你是 history模式 需要配置 vue.config.js publicPath
    // base: '/app/',
    scrollBehavior: () => ({y: 0}),
    routes: router
  })

export default createRouter()
複製代碼

更多:Vue Router

▲ 回頂部

✅ 配置 alias 別名

const path = require('path')
const resolve = dir => path.join(__dirname, dir)
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)

module.exports = {
  chainWebpack: config => {
    // 添加別名
    config.resolve.alias
      .set('@', resolve('src'))
      .set('assets', resolve('src/assets'))
  }
}
複製代碼

▲ 回頂部

✅ 配置 proxy 跨域

如果你的項目需要跨域設置,你需要打來 vue.config.js proxy 註釋 並且配置相應參數

module.exports = {
  devServer: {
    // ....
    proxy: {
      //配置跨域
      '/api': {
        target: 'https://test.xxx.com', // 介面的功能變數名稱
        // ws: true, // 是否啟用websockets
        changOrigin: true, // 開啟代理,在本地創建一個虛擬服務端
        pathRewrite: {
          '^/api': '/'
        }
      }
    }
  }
}
複製代碼

▲ 回頂部

✅ 配置 打包分析

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

module.exports = {
  chainWebpack: config => {
    // 打包分析
    if (IS_PROD) {
      config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
        {
          analyzerMode: 'static'
        }

以上的都會了嗎?另外我搞前端開發9年了。如果你有問題或者交流經驗可以來我的扣扣裙 519293536 找 我 都會儘力幫大家哦
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理
前端5


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • "devDependencies": { "antd": "^3.1.4", "babel-plugin-import": "~1.1.0", "classnames": "2.2.5", "qs": "^6.3.0", "robe-ajax": "^1.0.1", "expect": "^1.20 ...
  • # 從零開始的前端生活--position 包含塊 定義:什麼是包含塊,就是元素用來計算和定位的一個框,可以說是參照物吧。比如width: 50%;他是參照哪個元素的50%,那個元素就是“包含塊”。而絕對定位元素absolute的寬度是相對第一個position不為static的祖先元素計算的。計 ...
  • 字元串 去除字元串中所有空格 str = str.replace(/\s*/g, '') // 去除所有空格 價格校驗 val = val.replace(/[^\d.]/g, '') // 清除“數字”和“.”以外的字元 .replace(/\.{2,}/g, '.') // 只保留第一個. 清除 ...
  • 在VUE+Element 前端應用中,圖標是必不可少點綴界面的元素,因此整合一些常用的圖標是非常必要的,還好Element界面組件裡面提供了很多常見的圖標,不過數量不是很多,應該是300個左右吧,因此考慮擴展更多圖標,我引入了vue-awesome組件,它利用了Font Awesome的內置圖標,實... ...
  • 具體錯誤如下圖: 這是因為在微信小程式的 app.json 文件中是不能包含有註釋的,只需要把註釋去掉就可以了。 ...
  • 面對這麼多的知識點,有的盆友就麻爪了…… 我是誰? 我該從哪裡開始看? 我該怎麼看? 我該看多少? 這,是一個問題。 我們貼心的做了一個學習線路圖: 然並卵,很多人還是一頭霧水…… 我們先對每階段課程做個簡單介紹: PC端頁面製作 學習HTML+CSS搭建網頁、PhotoShop切圖等基礎知識,屬於 ...
  • 前言現在的 Node 對於前端而言可以涵蓋各個方面,包括命令行介面、插件、依賴庫、腳手架以及 Web 服務等。本文是一篇對於 Node 使用的淺談文章,會簡單講解一些個人使用 Node 的經驗,分享的內容主要可分為三個方面: 工具篇 插件篇 服務篇 工具篇會講解使用 NPM 發佈命令行介面的簡單教程 ...
  • 前言 1.本文將從零開始手寫一份vue-next中的響應式原理,出於篇幅和理解的難易程度,我們將只實現核心的api並忽略一些邊界的功能點 本文將實現的api包括 track trigger effect reactive watch computed2.最近很多人私信我問前端問題,博客登陸的少沒及時 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...