如何用vue-cli4.0构建多页面模板脚手架!?本文实战教你

multipage

Github地址 github.com/qinouz/mult…
基于 vue-cli4.0 构建 多页面 模板脚手架!javascript

启动项目

git clone https://github.com/qinouz/multipage.git cd multipage npm install npm run dev 复制代码

目录css

✅ 生成多页面配置

build/newUtils.js 里的 getEntry方法 根据目录下的 全部html文件生成页面路径以及对应html的对象。
var pages = utils.getEntry(['./src/module/**/*.html']);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 文件名 必需要一致,层级结构不限制。getEntryPagesvar mpages = utils.getEntryPages(pages);
├── module
  │   └── ss
  |   |   └── ss.html
  |   |   └── ss.js
复制代码

返回结果为:vue

{ '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 来执行不一样环境java

  • 经过 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_URLwebpack

在项目根目录中新建.env.*ios

  • .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 举例,用户能够根据需求修改git

// 本地环境配置
NODE_ENV = development
VUE_APP_SERVICE_URL =
VUE_APP_TEST=test BASE_URL = ./ 复制代码

根据环境不一样,变量就会不一样了github

// 根据环境不一样引入不一样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

相关文章
相关标签/搜索