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 相关文章推荐
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
JQuery each()嵌套使用小结
Apr 18 Javascript
Bootstrap树形控件使用方法详解
Jan 27 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
Javascript中Date类型和Math类型详解
Feb 27 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 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中return的用法实例分析
2015/02/28 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
PHP7 windows支持
2021/03/09 PHP
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
django rest framework 自定义返回方式
2020/07/12 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
迪奥官网:Dior.com
2018/12/04 全球购物
金融专业应届生求职信
2013/11/02 职场文书
先进员工获奖感言
2014/08/14 职场文书
离职证明标准格式
2014/09/15 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
金陵十三钗观后感
2015/06/04 职场文书