Vue 的多页面配置

在一个 Vue-cli 项目中支持多个页面

有时候,你想开发很多个具备单页应用性质的页面,一个一个用Vue-cli构建并且分成不同的项目未免太蠢了。

这篇文章用于记录我在给VCenter 前端配置多页面的时候的解决方法。

前言

网络上有很多类似的方法,一般都是讲讲增加Entry,增加HtmlWebpackPlugin的相关配置,每次新增或者删除页面的时候都需要做很多工作。

当然,也有一些文章,给了一些自动化解决方案,但是并不美观,也不方便,比如分页面划分文件夹之类的,然后通过webpack配置中的js自动引入这些文件夹,这种就比较倾向于是用文件夹作为约定。

在本文中,我结合了这两种方法,尝试通过一个配置文件来管理自己的多页面方案。

- 阅读剩余部分 -

Vue使用CDN减小打包体积

Vue 使用 CDN 减少打包体积

详细步骤

具体的步骤无需赘述了,index.html之中引入 CDN 的 script

    <!-- axios -->
    <script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.min.js"></script>
    <!-- Vue -->
    <script src="https://cdn.bootcss.com/vue/2.5.17/vue.min.js"></script>
    <!-- VueRouter -->
    <script src="https://cdn.bootcss.com/vue-router/3.0.2/vue-router.min.js"></script>
    <!-- ElementUI -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.4.11/index.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.4.11/theme-chalk/index.css" rel="stylesheet"/>

第二步在webpack里面配置externals:

  entry: {
    app: './src/main.js'
  },
  externals:{
    'vue': 'Vue',
    'vue-router': 'VueRouter',
    "axios":"axios",
    "ElementUI":"ELEMENT",
  },

最后从组件中删除 import xxx from vue之类的即可。
事实上不删也无所谓,webpack打包时自会略去这一部分(前提是与external中配置的名称一致)。


- 阅读剩余部分 -

KOA与stream的一个坑

绝对不要使用 ctx.body = request.get(stream_link)

在我的一个本地Server中,制作了一个解析视频网站视频流的API

大概的形式是这样的,

由 nodejs 向 视频网站请求流,然后使用ctx.body = request.get(stream_link)的方式向本地播放器输出流。

但是这其中有一个非常大的问题,就是在关闭播放器,KOA也获取到 ECONNRESET 错误的情况下,无法 destory Request的流。

这就导致即使关闭了播放器,nodejs依然在下载对应的那个视频,如果多切换几个视频,后台就会有多个下载任务占用带宽。

找了半天没有找到处理办法,KOA的相关讨论也只是说尽量不要给ctx.body设置为HTTP流。

最后直接Hack了一下,在app上直接监听Error事件,发生ECONNRESET的时候直接process.exit(0),反正后台有 forever的Daemon。

至少目前还没有找到可靠的处理方法。

如果可以处理的话,思路大概这样,将HTTP stream的引用暂存起来,读取ECONNRESET,并且与对应的ctx对应,找到 stream ,想办法结束流。

这个就留待以后实现吧,仅在此做一个记录