EggJS给Vue单页面提供静态服务
时间:2022-07-23
本文章向大家介绍EggJS给Vue单页面提供静态服务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
写个小项目时, 不想把Egg和Vue分开部署, 过于麻烦, 所以就研究了下如何让Egg给打包后的Vue提供静态服务 代码地址: https://github.com/klren0312/eggVueSpaTemplate
1.配置EggJS
- 在config/plugin.js中开启静态插件
static: {
enable: true,
}
- config/config.default.js中配置静态文件存放的文件夹
config.assets = {
publicPath: '/public/',
}
- 配置controller
读取
index.html
文件, 以html
形式返回给请求方
'use strict';
const Controller = require('egg').Controller;
const fs = require('fs')
const path = require('path')
class PageController extends Controller {
async index () {
const { ctx } = this
ctx.response.type = 'html'
ctx.body = fs.readFileSync(path.resolve(__dirname, '../../public/index.html'))
}
}
module.exports = PageController;
'use strict'
module.exports = app => {
const { controller, router } = app
router.get('/', controller.view.page.index)
}
2.前端配置
- 编写复制脚本用于将打包后的文件复制到EggJS项目的
public
文件夹
const fs = require('fs')
const path = require('path')
/**
* 复制文件夹
* @param {*} src
* @param {*} dist
*/
const copyDir = function (src, dest) {
fs.mkdirSync(dest)
const files = fs.readdirSync(src)
for (let i = 0; i < files.length; i++) {
const current = fs.lstatSync(path.join(src, files[i]))
if (current.isDirectory()) {
copyDir(path.join(src, files[i]), path.join(dest, files[i]))
} else if (current.isSymbolicLink()) {
const symlink = fs.readlinkSync(path.join(src, files[i]))
fs.symlinkSync(symlink, path.join(dest, files[i]))
} else {
const oldFile = fs.createReadStream(path.join(src, files[i]))
const newFile = fs.createWriteStream(path.join(dest, files[i]))
oldFile.pipe(newFile)
}
}
}
/**
* 删除文件夹下所有文件
* @param {String} path 需要删除的文件夹
*/
function delDir(path) {
let files = [];
if (fs.existsSync(path)) {
files = fs.readdirSync(path);
files.forEach((file, index) => {
let curPath = path + "/" + file;
if (fs.statSync(curPath).isDirectory()) {
delDir(curPath); //递归删除文件夹
} else {
fs.unlinkSync(curPath); //删除文件
}
});
fs.rmdirSync(path);
}
}
const publicFolder = path.resolve('../app/public')
delDir(publicFolder)
copyDir(path.resolve('dist'), publicFolder)
- 配置package.json, 在执行
build
后, 将文件复制
"scripts": {
......
"build": "vue-cli-service build && node copyFolder.js",
......
},
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 批量执行crontab指定条目的注释和解注释
- Rancher集群部署后需要做的几件事
- Ingress(Nginx)日志持久化与可视化(多图预警)
- .Net在Windows上使用Jenkins做CI/CD的那些事
- 【STM32H7】第9章 RL-TCPnet调试方法(Event Recorder和串口两种)
- 【STM32F429】第9章 RL-TCPnet调试方法(Event Recorder和串口两种)
- 【STM32F407】第9章 RL-TCPnet V7.X调试方法(Event Recorder和串口两种)
- CentOS7的udev的绑定规则
- 案例:记录一则强制开库遭遇ORA-16433的处理过程
- mybatis升级为mybatis-plus踩到的坑
- Treepath
- linux 远程ssh免密登录
- npm 安装 electron taobao镜像 404错误 自用 实践笔记
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(二):部署
- 队列的一种实现:循环队列