打通前后端构建一个Vue+Express的开发环境


Posted in Javascript onJuly 17, 2018

前端做多了,自然就会想往后端伸手。更何况现在有了Node和Express,让前端做后端开发的学习降低了不少。

最近正好揽下了一个 Vue + Express + mysql 的小项目。项目开始时是前后端分开开发的,但是当后台做好一部分要进行连接测试时问题就来了。前端部分在每次修改过就需要build一次,而后台也每次需要重启一次服务器才能进行调试。可想而知,这样的开发和调试效率是很低的。在这么煎熬着做了一个功能之后,实在受不了。于是便想有没有什么方法可以热更新开发前后端。毕竟 vue-cli 在调试时,后台就是用 express 做的服务器。

在网上搜索了一下,发现果然有前辈们已经想到这个问题,并做了一个 Vue + Express 的开发环境。

可以参考这篇文章:从零开始搭建 Express + Vue 开发环境

原理的话可以参考这篇文章,主要就是通过修改 webpack 的配置文件来达到同时开发前后台的目的。于是果断去 Fork 了作者在 Github 上的项目。 clone 下来运行之后发现,虽然热更新是没有问题了,但是对于前端 Vue 的部分来说,由于没有build,因此是无法打包变为生产环境的。那么为了走完这一步,便自己动手对项目进行了改造。

改造后的版本: 可 build 版 Vue + Express 开发环境 求个Star也欢迎批评指教

打通前后端构建一个Vue+Express的开发环境

改造后目录

其中关于 webpack 的配置,没有使用原项目的配置文件,而是几乎将 vue-cli 生成的项目的配置文件都拷过来使用的。
这里需要注意的是,下面几个配置文件的所引用的位置变更一下即可。

server/index.js

这是 express 服务器的入口,在这里需要修改的地方主要有两个。引用 webpack 配置文件的路径,以及静态页面的设置。

import express from 'express'
import path from 'path'
import favicon from 'serve-favicon'
import logger from 'morgan'
import cookieParser from 'cookie-parser'
import bodyParser from 'body-parser'
import webpack from 'webpack'
import webpackDevMiddleware from 'webpack-dev-middleware'
import webpackHotMiddleware from 'webpack-hot-middleware'

import config from '../../build/webpack.dev.conf' //这里指向 vue-cli 拷贝过来的配置文件

const app = express()

// view engine setup 模板文件,根据具体情况添加
// app.set('views', path.join(__dirname, 'views'))
// app.set('view engine', 'jade')

// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
app.use(logger('dev'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public')))

const compiler = webpack(config)

app.use(webpackDevMiddleware(compiler, {
 publicPath: config.output.publicPath,
 stats: { colors: true }
}))

app.use(webpackHotMiddleware(compiler))
// 引用最后的静态文件
app.use(express.static(path.join(__dirname, 'views')))
app.get('/', function (req, res) {
 res.sendFile('./views/index.html')
})

app.listen(4000)

export default app

webpack.dev.conf.js / webpack.prod.conf.js

这两个文件中,也只要修改一下最后代码注入的模板的路径即可。以 webpack.dev.conf.js 为例。

var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')

// add hot-reload related code to entry chunks
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
 baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
})

module.exports = merge(baseWebpackConfig, {
 module: {
  rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
 },
 // cheap-module-eval-source-map is faster for development
 devtool: '#cheap-module-eval-source-map',
 plugins: [
  new webpack.DefinePlugin({
   'process.env': config.dev.env
  }),
  // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
  new webpack.HotModuleReplacementPlugin(),
  new webpack.NoEmitOnErrorsPlugin(),
  // https://github.com/ampedandwired/html-webpack-plugin
  new HtmlWebpackPlugin({
   filename: 'index.html',
   // 这里的路径需要重新指定为现在的路径
   template: 'src/server/views/index.html',
   inject: true
  }),
  new FriendlyErrorsPlugin()
 ]
})

因为是按照 vue-cli 生成出的目录来拷贝的,因此其余的文件都不需要做任何的修改。

接下来只要试着运行一下就可以了。

运行开发模式:

npm run dev

打包前端代码:

npm run build

打包完之后,只要稍微修改一下 express 启动的 js 文件就可以变为正式上线的版本了。如此一来,就能很轻松愉快地进行全栈的开发了。个人感觉至少可以提高30%吧。所以各位不来试一试吗?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中剪贴板兼容性、判断复制成功或失败
Mar 09 Javascript
prototype 的说明 js类
Sep 07 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
vue cli升级webapck4总结
Apr 04 Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 Javascript
如何区分vue中的v-show 与 v-if
Sep 08 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 #Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 #Javascript
微信小程序倒计时功能实例代码
Jul 17 #Javascript
详解vue+webpack+express中间件接口使用
Jul 17 #Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 #Javascript
Vue2.X 通过AJAX动态更新数据
Jul 17 #Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 #Javascript
You might like
一些使用频率比较高的php函数
2008/10/03 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
javascript比较文档位置
2008/04/08 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
JavaScript Split()方法
2015/12/18 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JS实现小星星特效
2019/12/24 Javascript
Python实现远程调用MetaSploit的方法
2014/08/22 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python日志模块logbook使用方法
2019/09/19 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
学校门卫工作职责
2013/12/07 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
创业女性典型材料
2014/05/02 职场文书
环保倡议书格式范文
2014/05/14 职场文书
入党推优材料
2014/06/02 职场文书
先进教师事迹材料
2014/12/16 职场文书
秋季运动会开幕词
2015/01/28 职场文书
学校国庆节活动总结
2015/03/23 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python