egg-vue-webpack-boilerplate

基于 Egg + Vue + Webpack SSR 服务端渲染和 CSR 前端渲染工程骨架项目,包括前台系统(SSR MPA)和后台管理系统(SSR SPA)。

系统功能

采用 Egg + Vue 服务端渲染

[图片上传失败...(image-a57696-1602485610603)]

博客首页

文章列表

文章详情

采用 Egg + Vue + Vue-Router + Element 单页面服务端同构渲染

[图片上传失败...(image-2c10d1-1602485610603)]

Dashboard

Markdown

文章管理

骨架介绍

常用功能

常用 Example 实现见 awesome 分支代码。

Sass/Less/Stylus 功能

Dynamic Component Load

Element-UI 集成

Single Page Application

纯净分支

因该项目包含了多种实现, 提供多种例子实现,为防干扰, 特提供了两个纯净版本分支用于实际项目开发, 请自行选用。

Egg + Vue + Axios 多页面服务端渲染分支 feature/green/multi

Egg + Vue + vue-router + vuex + axios 单页面服务端渲染分支 feature/green/spa

Egg + Vue + vue-router + vuex + axios 前端渲染 asset 方案 feature/green/asset

Egg + Vue + vue-router + vuex + axios 前端渲染一体化方案 element-admin

版本

Egg 版本: ^2.x.x

Node 版本: ^8.x.x+

Vue 版本: ^2.5.0

Webpack 版本: ^4.x.x, 对应 easywebpack-vue 版本为 ^4.x.x

Webpack3 版本项目骨架请见 webpack3 分支, 对应 easywebpack-react 版本为 3.x.x

文档

特性

支持服务端渲染SSR(Server Side Render), 前端渲染CSR(Client Side Render) 方式

支持 Node 和 前端代码修改, Webpack 自动编译和热更新, npm run dev 一键启动应用

基于 vue + axios 多页面服务端渲染, 客户端渲染同构实现, 支持 asyncData 渲染

基于 vue + vuex + vue-router + axios 单页面服务器客户端同构实现

支持 js/css/image 资源依赖, 内置支持 CDN 特性, 支持 css/sass/less 样式编写

支持根据 .vue 文件自动创建 Webpack Entry 入口文件

开始支持多进程和缓存编译, 支持 Webpack dll 自动化构建, 与多进程编译结合,构建速度减少 2/3

支持 Vue 组件 import 异步加载, 具体实例请看app/web/page/dynamic

支持服务端渲染(SSR)失败时,自动降级为前端渲染(CSR)模式

提供 国际化 i18n 多语言支持方案

插件

使用

安装cli(非必需)

npm install @easy-team/easywebpack-cli -g

easywebpack-cli 已内置 devDependencies 中, 无需安装。如果你需要在命令行使用 easy 命令, 可以单独全局安装。

安装依赖

npm install

本地开发

npm run dev

应用访问: http://127.0.0.1:7001

[图片上传失败...(image-7223e2-1602485610603)]

本地开发启动 Webpack 构建, 默认配置文件为项目根目录 webpack.config.js 文件。 SSR 需要配置两份 Webpack 配置,所以构建会同时启动两个 Webpack 构建服务。web 表示构建 JSBundle 给前端用,构建后文件目录 public, 默认端口 9000; node 表示构建 JSBundle 给前端用,构建后文件目录 app/view, 默认端口 9001.

本地构建是 Webpack 内存构建,文件不落地磁盘,所以 app/view 和 public 在本地开发时,是看不到文件的。 只有发布模式(npm run build)才能在这两个目录中看到构建后的内容。

线上部署

首先在本地或者 ci 进行项目构建

npm run build

上传源代码以及构建的相关文件到服务器,然后启动应用

npm start

构建配置

Egg Webpack 配置代码调用入口

// ${root}/config/config.local.js

exports.webpack = { // 默认是如下配置,可不配置

// browser: 'http://localhost:7001', // 配置 false 可以关闭自动打开浏览器

// webpackConfigList: require('@easy-team/easywebpack-vue').getWebpackConfig()

};

运行 npm run build 可以进行 Webpack 项目构建

通过 easy print 可以打印 Webpack 原生配置

项目结构

├── app

│ ├── controller

│ │ ├── test

│ │ │ └── test.js

│ ├── extend

│ ├── lib

│ ├── middleware

│ ├── mocks

│ ├── proxy

│ ├── router.js

│ ├── view

│ │ ├── home

│ │ │ └── home.js // Webpack 服务器编译的jsbundle文件, 对应 app/web/page/home/home.vue

│ └── web // 前端工程目录

│ ├── asset // 存放公共js,css资源

│ ├── framework // 前端公共库和第三方库

│ │ ├── fastclick

│ │ │ └── fastclick.js

│ │ ├── sdk

│ │ │ ├── sdk.js

│ │ ├── storage

│ │ │ └── storage.js

│ │ └── vue // 与vue相关的公开代码

│ │ ├── app.js // 前后端调用入口, 默认引入componet/directive/filter

│ │ ├── component.js // 组件入口, 可以增加component目录,类似下面的directive

│ │ ├── directive // directive 目录,存放各种directive组件

│ │ ├── directive.js // directive引用入口

│ │ └── filter.js // filter引用入口

│ ├── page // 前端页面和webpack构建目录, 也就是webpack打包配置entryDir

│ │ ├── home // 每个页面遵循目录名, js文件名, scss文件名, vue文件名相同

│ │ │ ├── home.scss

│ │ │ ├── home.vue

│ │ │ ├── images // 页面自有图片,公共图片和css放到asset下面

│ │ │ │ └── icon_more.png

│ │ │ └── w-week // 页面自有组件,公共组件放到widget下面

│ │ │ ├── w-week.scss

│ │ │ └── w-week.vue

│ │ └── test // 每个页面遵循目录名, js文件名, scss文件名, vue文件名相同

│ │ └── test.vue

│ ├── store // 引入vuex 的基本规范, 可以分模块

│ │ ├── app

│ │ │ ├── actions.js

│ │ │ ├── getters.js

│ │ │ ├── index.js

│ │ │ ├── mutation-type.js

│ │ │ └── mutations.js

│ │ └── store.js

│ └── component // 公共业务组件, 比如loading, toast等, 遵循目录名, js文件名, scss文件名, vue文件名相同

│ ├── loading

│ │ ├── loading.scss

│ │ └── loading.vue

│ ├── test

│ │ ├── test.vue

│ │ └── test.scss

│ └── toast

│ ├── toast.scss

│ └── toast.vue

├── build // webpack 自定义配置入口, 会与默认配置进行合并(看似这么多,其实这里只是占个位说明一下)

│ ├── base

│ │ └── index.js // 公共配置

│ ├── client // 客户端webpack编译配置

│ │ ├── dev.js

│ │ ├── prod.js

│ │ └── index.js

│ ├── server // 服务端webpack编译配置

│ │ ├── dev.js

│ │ ├── prod.js

│ │ └── index.js

│ └── index.js

├── config

│ ├── manifest.json // webpack 构建的资源依赖依赖表

│ ├── config.default.js

│ ├── config.local.js

│ ├── config.prod.js

│ ├── config.test.js

│ └── plugin.js

├── doc

├── index.js

├── public // webpack 编译的前端静态资源存入目录

│ ├── static

│ │ ├── css

│ │ │ ├── home

│ │ │ │ ├── home.07012d33.css

│ │ │ └── test

│ │ │ ├── test.4bbb32ce.css

│ │ ├── img

│ │ │ ├── change_top.4735c57.png

│ │ │ └── intro.0e66266.png

│ ├── test

│ │ └── test.js

│ └── vendor.js // 生成的公共打包库

功能实现

多页面服务端渲染/前端渲染同构实现

多页面前端页面实现

在app/web/page 目录下面创建home目录, home.vue 文件, Webpack自动根据.vue文件创建entry入口, 具体实现请见webpack.config.js

home.vue 编写界面逻辑, 根元素为layout(自定义组件, 全局注册, 统一的html, meta, header, body)

{{message}}

@import "home.css";

export default {

components: {

},

computed: {

},

methods: {

},

mounted() {

}

}

多页面后端渲染实现, 通过 egg-view-vue-ssr 插件 render 方法实现

创建controller文件home.js

exports.index = function* (ctx) {

// index/index.js 是 app/web/page/index/index.vue 构建后的服务端页面渲染的 JSBundle 文件。

yield ctx.render('index/index.js', { message: 'vue server side render!' });

};

添加路由配置

app.get('/home', app.controller.home.home.index);

多页面走前端渲染(后端路由)实现, 通过 egg-view-vue-ssr 插件 renderClient 方法实现

创建controller文件home.js

exports.client = function* (ctx) {

yield ctx.renderClient('index/index.js', { message: 'vue client side render!' });

};

添加路由配置

app.get('/client', app.controller.home.home.client);

HTML静态页面前端渲染

直接有easywebpack构建出静态HTML文件, 请见 webpack.config.js 配置和 app/web/page/html代码实现

通过 egg-static 静态文件访问HTML文件

单页面服务器渲染同构实现

单页面前端实现

在app/web/page 目录下面创建app目录, app.vue, app.js 文件.

app.vue 编写界面逻辑, 根元素为layout(自定义组件, 全局注册, 统一的html, meta, header, body)

export default {

computed: {

},

mounted(){

}

}

app.js 页面调用入口

import { sync } from 'vuex-router-sync';

import store from 'store/app';

import router from 'component/app/router';

import app from './app.vue';

import App from 'app';

import Layout from 'component/layout/app';

App.component(Layout.name, Layout);

sync(store, router);

export default App.init({

base: '/app',

...app,

router,

store

});

单页面后端实现

创建controller文件app.js

exports.index = function* (ctx) {

// app/app.js 是 app/web/page/app/app.js 构建后的服务端页面渲染的 JSBundle 文件。

yield ctx.render('app/app.js', { url: this.url.replace(/\/app/, '') });

};

添加路由配置

app.get('/app(/.+)?', app.controller.app.app.index);

文章

交流

功能性需求或者Bug问题, 欢迎大家 PR 完善, 如果你需要了解更多信息,请加 QQ 群: 433207205 (备注:easyjs)

Contributors ✨

Thanks goes to these wonderful people (emoji key):

sky

egg html模板,egg+vue服务端渲染模板项目介绍相关推荐

  1. 手把手教你 Vue 服务端渲染

    写在前面 在写这篇文章之前,我有写一篇 Vue 预渲染的教程 以及 在线示例,有需要的可以看一下~ [下面开始 Vue 服务端渲染] 服务端渲染 = SSR = Server-Side Renderi ...

  2. Nuxt --- 也来说说vue服务端渲染

    Nuxt 随着现在vue和react的流行,许多网站都做成了SPA,确实提升了用户体验,但SPA也有两个弱点,就是SEO和首屏渲染速度.为了解决单页应用的痛点,基于vue和react的服务端渲染应运而 ...

  3. Vue 服务端渲染(SSR)、Nuxt.js - 从入门到实践

    前言 10月初有幸接到公司官网改版需求,要求采用服务端渲染模式对原网站进行seo优化. 由于团队一直使用的vue技术栈,所以我第一时间想到的就是采用vue 服务端渲染(SSR)来实现该需求,即能减少团 ...

  4. Vue 服务端渲染 预渲染

    文章目录 简介 那么 什么是服务端渲染 为什么使用服务端渲染 服务端渲染 or 预渲染 区别 如何使用预渲染 如何搭建一个预渲染开发环境 Tip 写在最后 简介 关于 Vue 的 SPA 说的已经太多 ...

  5. java vue 服务端渲染_vue服务端渲染缓存应用详解

    服务端渲染简介 服务端渲染不是一个新的技术:在 Web 最初的时候,页面就是通过服务端渲染来返回的,用 PHP 来说,通常是使用 Smarty 等模板写模板文件,然后 PHP 服务端框架将数据和模板渲 ...

  6. Vue 服务端渲染原理 拆分成三步个步骤简单的实现一个案例

    前言 可能我们平常接触比较多的是使用 vue + vue全家桶来搭建起一个单页(SPA)应用.用 服务端渲染 搭建项目比较少,本文是记录我在学习 服务端渲染 过程中的一些见解,如有出错或疏漏,麻烦帮忙 ...

  7. vue服务端渲染之nuxtjs

    前言 本篇主要针对nuxtjs中的一些重要概念整理和代码实现! 在学习vue服务端渲染之前,先搞清楚几个概念: 什么是客户端渲染(CSR) 什么是服务端渲染(SSR) CSR和SSR有什么异同 客户端 ...

  8. vue服务端渲染 MySQL_vue服务端渲染简单入门实例

    想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...

  9. vue服务端渲染——基础

    文章目录 vue服务端渲染(基础) Nuxt框架 文件目录结构 项目启动.打包 生命周期 SSR nuxtserverInit middleware 中间件 全局中间件 页面级中间件 validate ...

最新文章

  1. 顺序表中有效元素的长度_408数据结构之顺序表进阶(1)
  2. mac终端命令行总结
  3. Coins POJ - 1742(多重背包+是否装满问题)
  4. Spring的@ExceptionHandler注解使用方法
  5. 微软《我的世界》PC Java版销量超过3000万
  6. python开发之路---第二章之--函数之匿名函数
  7. 【Sentry】Sentry安装
  8. 车辆等红灯时是用N档还是D档呢?
  9. java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
  10. IDEA的依赖包报红问题
  11. 进阶篇: ramdump分析--9 ram dump文件种类
  12. 物联网平台开发接口http/mqtt,支持部标808/1078协议对接
  13. Hadoop原理讲解(面试题)
  14. 回忆是一杯毒酒,让人肝肠寸断
  15. 转移APK从手机到PC和PC到手机
  16. ​stp文件转wrl
  17. 如何编辑扫描的PDF文件?
  18. viewers.js 图片查看插件使用说明-vue中引用
  19. ACP敏捷知识点汇总
  20. spm12预处理步骤及知识点总结

热门文章

  1. 一些有难度的网络流问题
  2. HttpMessageConverter
  3. 数据库设计中String类型的数据库类型选择
  4. 小麦盒子cdn_国内外优秀的 CDN 加速服务商,让你的网站访问速度飞起来
  5. QImage的深拷贝与浅拷贝
  6. Android OpenGL ES 从入门到精通系统性学习教程
  7. js人民币转换大写函数
  8. Android布局文件中的xmlns:tools作用以及用法
  9. android cda格式播放,cda格式播放器_什么软件可以支持.cda音频播放
  10. java list 博客园_Java集合系列(一)List集合