VUE.CLI4.0配置多页面入口的实现


Posted in Javascript onNovember 25, 2019

为何需要配置多页面?

在实际工作中,肯定会遇到大型项目,往往一个架构里面会开发多个应用,而这些应用又没有太大的关联,但有可能会共用一些组件或者是样式表等,那么就会出现一个问题,打包的时候会将这些互不相关的应用全部打包。

而因为脚手架VueCli所以构建的项目属于单页面应用,因此我们就需要手动去配置,搭建一个多入口,多应用的体系

需求

首页显示各个应用名称,点击进去各自应用

实现

使用vue/cli生成一个vue项目

npm install -g @vue/cli 个人不建议直接全局安装,因为可能会对其他项目造成影响,所以会选择加上 -D 来进行本地安装

然后 vue create project-name (使用本地安装的记得加上 npx

VUE.CLI4.0配置多页面入口的实现 

成功创建之后,我们看看当前的目录结构

VUE.CLI4.0配置多页面入口的实现 

这里我们需要重构一下我们的目录 让他更可观

VUE.CLI4.0配置多页面入口的实现 

配置vue.config.js

let path = require('path')
let glob = require('glob') // 用于筛选文件

// 工厂函数 - 配置pages实现多页面获取某文件夹下的html与js
function handleEntry(entry) {
 let entries = {}
 let entryBaseName = ''
 let entryPathName = ''
 let entryTemplate = ''
 let applicationName = ''

 glob.sync(entry).forEach(item => {
  console.log('!!!', item)
  entryBaseName = path.basename(item, path.extname(item))
  console.log('entryBaseName:', entryBaseName)
  entryTemplate = item.split('/').splice(-3)
  console.log('entryTemplate:', entryTemplate)
  entryPathName = entryBaseName // 正确输出js和html的路径
  console.log('entryPathName', entryPathName)

  entries[entryPathName] = {
   entry: 'src/' + entryTemplate[0] + '/' + entryTemplate[1] + '/' + entryTemplate[1] + '.js',
   template: 'src/' + entryTemplate[0] + '/' + entryTemplate[1] + '/' + entryTemplate[2],
   title: entryTemplate[2],
   filename: entryTemplate[2]
  }
 })

 return entries
}

let pages = handleEntry('./src/applications/**?/*.html')
console.log(pages)

// 以下开始配置
module.exports = {
 lintOnSave: false, // 关掉eslint
 /**
  * baseUrl 从 3.3起废用,使用pubilcPath代替
  * 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath 为 /my-app/。
  * 这个值也可以被设置为空字符串 ('') 或是相对路径 ('./'),这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径,也可以用在类似 Cordova hybrid 应用的文件系统中。
  */
 publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
 productionSourceMap: false,
 // 入口设置
 pages,
 devServer: {
  index: '/', // 运行时,默认打开application1页面
  // 告诉dev-server在服务器启动后打开浏览器,将其设置true为打开默认浏览器
  open: true,
  host: 'localhost',
  port: 8080,
  https: false,
  hotOnly: false,
  // 配置首页 入口链接
  before: app => {
   app.get('/', (req, res, next) => {
    for (let i in pages) {
     res.write(`<a target="_self" href="/${i}">/${i}</a></br>`);
    }
    res.end()
   });
  }
 }
}
application1.js
import Vue from 'vue'
import Application1 from './application1.vue'
import router from './router'
import store from './vuex'

Vue.config.productionTip = false

new Vue({
 router,
 store,
 render: h => h(Application1)
}).$mount('#app')
application1.vue

<template>
 <div id="app">
  <a class='tips' href='application2.html'>
  Hello Im Application1,Clike me can go to Application2
  </a>
 </div>
</template>

<style lang="less">
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
}

.tips{
 display: flex;
 justify-content: center;
 align-items:center;
 color:lightsalmon;
 font-size:20px;
 font-weight:bold;
}

</style>
application1.html

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width,initial-scale=1.0">
 <link rel="icon" href="<%= BASE_URL %>favicon.ico">
 <title>Application1</title>
</head>

<body>
 <noscript>
  <strong>We're sorry but test-my-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
 </noscript>
 <div id="app"></div>
 <!-- built files will be auto injected -->
</body>

</html>

同理 application2应用也这样配置 运行

npm run serve

运行

VUE.CLI4.0配置多页面入口的实现 

VUE.CLI4.0配置多页面入口的实现

VUE.CLI4.0配置多页面入口的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现动画效果的实例代码
May 07 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
Sep 02 Javascript
浅析创建javascript对象的方法
May 13 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
Dec 02 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
webpack 开发和生产并行设置的方法
Nov 08 Javascript
vue多层嵌套路由实例分析
Mar 19 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
用Golang运行JavaScript的实现示例
Nov 25 #Javascript
JS插入排序简单理解与实现方法分析
Nov 25 #Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
Nov 25 #Javascript
python实现迭代法求方程组的根过程解析
Nov 25 #Javascript
JS桶排序的简单理解与实现方法示例
Nov 25 #Javascript
JavaScript交换两个变量方法实例
Nov 25 #Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
Nov 25 #Javascript
You might like
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
vue中的inject学习教程
2019/04/24 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
深入理解Python中range和xrange的区别
2017/11/26 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python清空文件并替换内容的实例
2018/10/22 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
pymysql模块的操作实例
2019/12/17 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
详解如何修改python中字典的键和值
2020/09/29 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
Java程序员综合测试题
2014/04/25 面试题
事业单位接收函
2014/01/10 职场文书
学校创先争优活动总结
2014/08/28 职场文书
法人授权委托书样本
2014/09/19 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
旷课检讨书500字
2014/10/14 职场文书
2015年司机工作总结
2015/04/23 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
MySQL中order by的使用详情
2021/11/17 MySQL