还在为部署Vue SSR烦恼?Koa-vuessr-middlware 了解一下

栏目: Node.js · 发布时间: 6年前

内容简介:最近在写一个新应用时,想用Koa 结合 Vue SSR,同时写Api 接口和页面,于是开始上手写,结果发现需要写的东西很多,参考的大多数例子都用的是十分类似的代码(好像大多都是基于尤大大的各位看官,走过路过,给个star 鼓励一下吧,谢谢!如果以下的文档不够清晰,可以参考我写的

最近在写一个新应用时,想用Koa 结合 Vue SSR,同时写Api 接口和页面,于是开始上手写,结果发现需要写的东西很多,参考的大多数例子都用的是十分类似的代码(好像大多都是基于尤大大的 hackernews ),于是索性花了一个晚上把代码封装成一个Koa 的中间件,让后来者少造个轮子;

各位看官,走过路过,给个star 鼓励一下吧,谢谢! 项目地址

还在为部署Vue SSR烦恼?Koa-vuessr-middlware 了解一下

示例

如果以下的文档不够清晰,可以参考我写的 Demo 进行参考

安装

npm install koa-vuessr-middleware
复制代码

文档

使用

首先需要在项目根目录下添加一个 .ssrconfig 文件,内容如下:

{
  "ouput": {
    "path": "./dist", 
    "publicPath": "/dist/"
  },
  "entry": {
    "client": "./src/entry-client.js",
    "server": "./src/entry-server.js"
  },
  "webpackConfig": {
    "client": "./build/webpack.client.conf.js",
    "server": "./build/webpack.server.conf.js"
  }
}
复制代码

说明:

  • entry 如果你想使用内置默认webpack 配置,则必须配置此项,包括一个 clientserverclient 为客户端入口js, server 则为服务端入口js
  • output 如果你想使用内置默认webpack 配置,则需要配置一个 pathoutputPath ,可以参考 webpack 的output 配置
  • webpackConfig 如果你想用自定义的webpack 配置,则需要配置以下两项:
    client
    server
    

注:可以在项目地址中参考相应的配置文件进行编写

基本用法如下:

const koa = require('koa');
const app = new koa();
const koaRouter = require('koa-router');
const ssr = require('koa-vuessrr-middleware');

router.get('/otherroute', otherloaders);
router.get('*', ssr(app, opts));

app.use(router.routes());
app.listen(8080);
复制代码
  • 开发环境
router.get('*', ssr(app, {
    title: '网页默认标题',
    isProd: false, // 此时将启用热更新功能,此为默认选项,
    templatePath: './index.template.html' // 渲染默认模板地址,如果不提供则会使用内置的默认模板
}));
复制代码
  • 生产环境

先执行以下命令生成生产代码

buildssr
复制代码

然后使用以下代码

router.get('*', ssr(app, {
    title: '网页默认标题',
    isProd: true, // 此时将直接读取生产代码,
    templatePath: './index.template.html' // 渲染默认模板地址,如果不提供则会使用内置的默认模板
}));
复制代码

文件目录建议如下例子:

├── src                      app directory
   ├── router/              route directory
   ├── views/               views directory
   ├── components/          compoennts directory
   ├── app.js               js file to export a createApp function
   ├── App.vue              root Vue
   ├── entry-server.js      server side entry point
   └── entry-client.js      client side entry point
├── index.js                 server entry point
├── .ssrconfig               SSR configuration file
├── ...	
复制代码

app.js 示例

import Vue from 'vue'
import App from './App.vue'
import { createRouter } from './router'
import titleMixin from './util/title'

Vue.mixin(titleMixin)
export function createApp () {
  const router = createRouter()
  const app = new Vue({
    router,
    render: h => h(App)
  })
  return { app, router, }
}
复制代码

entry-client.js 示例

import Vue from 'vue'
import 'es6-promise/auto'
import { createApp } from './app'

const { app, router } = createApp()

router.onReady(() => {
  app.$mount('#app')
})
复制代码

entry-server.js 示例

import { createApp } from './app';
export default context => {
  return new Promise((resolve, reject) => {
    const { app, router } = createApp()
    const { url } = context
    const { fullPath } = router.resolve(url).route
    if (fullPath !== url) {
      return reject({ url: fullPath })
    }
    router.push(url)
    router.onReady(() => {
      const matchedComponents = router.getMatchedComponents()
      if (!matchedComponents.length) {
        return reject({ code: 404 })
      }
      Promise.all(matchedComponents.map(({ asyncData }) => asyncData)).then(() => {
        resolve(app)
      }).catch(reject)
    }, reject)
  })
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

简约至上

简约至上

[英] Giles Colborne / 李松峰、秦绪文 / 人民邮电出版社 / 2011-1-1 / 35.00

追求简单易用是人类的本性,无论是互联网产品。还是移动应用。亦或其他交互式设计,简单易用始终都是赢得用户的关键。同时,简单易用的程度也与产品寿命的长短密切相关。在《简约至上:交互式设计四策略》中,作者Giles托20多年交互式设计的探索与实践。提出了合理删除、分层组织、适时隐藏和巧妙转移这四个达成简约至上的终极策略,讲述了为什么应该站在主流用户一边,以及如何从他们的真实需求和期望出发,简化设计,提升......一起来看看 《简约至上》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码