webpack結(jié)合express實(shí)現(xiàn)自動(dòng)刷新的方法
前言
在我們開(kāi)發(fā)的過(guò)程中,我們會(huì)使用webpack-dev-server實(shí)現(xiàn)自動(dòng)刷新,webpack-dev-server會(huì)把編譯后的文件全部保存在內(nèi)存里,而不會(huì)寫(xiě)入到文件目錄內(nèi)。但當(dāng)我們的開(kāi)發(fā)是前端和后端在一個(gè)項(xiàng)目里的時(shí)候就不行了。我們可以使用webpack結(jié)合express實(shí)現(xiàn)自動(dòng)編譯刷新
配置webpack
首先就是配置webpack的配置。新建一個(gè)webpack.config.js文件
const path = require('path') const webpack = require('webpack') var hotMiddlewareScript = 'webpack-hot-middleware/client' module.exports = { entry: { main: ['./src/main.js', hotMiddlewareScript] }, mode: 'development', output: { path: path.resolve(__dirname, 'public'), filename: 'js/[name].js', publicPath: '/' }, resolve: { extensions: ['.js'] }, plugins: [ new webpack.optimize.OccurrenceOrderPlugin(), new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin() ] }
我們這里需要關(guān)注的是,每個(gè)entry后都要增加一個(gè)hotMiddlewareScript,還有就是增加3個(gè)插件
首先新建一個(gè)webpack.middleware文件,這里我們需要用到webpack-dev-middleware和 webpack-hot-middleware兩個(gè)中間件。
const webpack = require('webpack') const webpackDevMiddleware = require('webpack-dev-middleware') const webpackHotMiddleware = require('webpack-hot-middleware') const webpackConfig = require('./webpack.config') module.exports = app => { let compiler = webpack(webpackConfig) app.use(webpackDevMiddleware(compiler, { publicPath: '/', stats: { colors: true, chunks: false } })) app.use(webpackHotMiddleware(compiler)) }
注意:webpack-dev-middleware和webpack-hot-middleware的靜態(tài)資源服務(wù)僅僅用于開(kāi)發(fā)環(huán)境。到了生產(chǎn)環(huán)境,應(yīng)該使用express.static()。
下面編寫(xiě)express代碼
const express = require('express') const bodyParser = require('body-parser') const {resolve} = require('path') const webpackMiddleware=require('./webpack.middleware') const router = express.Router() const app=express() const port = process.env.PORT || 3000 webpackMiddleware(app) app.use(express.static(resolve(__dirname,'./public'))) app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) // ...代碼 app.use(router) app.listen(port, () => { console.log(`Server listening on http://localhost:${port}, Ctrl+C to stop`) })
這樣,我們?cè)陂_(kāi)發(fā)的時(shí)候,前端和后端都在同一個(gè)服務(wù)里運(yùn)行了
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
js+html5實(shí)現(xiàn)復(fù)制文字按鈕
這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)復(fù)制文字按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07在JavaScript中使用for循環(huán)的方法詳解
在本文中,我們將學(xué)習(xí) JavaScript 中提供,的 for 循環(huán),我們將了解如何在 JavaScript 中使用 for...in 循環(huán)語(yǔ)句、其語(yǔ)法、工作原理示例、何時(shí)使用或避免使用它以及我們可以使用哪些其他類型的循環(huán),需要的朋友可以參考下2023-07-07Javascript attachEvent傳遞參數(shù)的辦法
找了半天找到的解決辦法,看介紹說(shuō)是javascript的閉包問(wèn)題,導(dǎo)致得不能直接讀取外部的那個(gè)函數(shù),不然就所有傳遞的參數(shù)都變?yōu)樽詈笠粋€(gè)了。2009-12-12js使用removeChild方法動(dòng)態(tài)刪除div元素
本節(jié)為大家介紹了js使用removeChild方法動(dòng)態(tài)刪除div元素,需要的朋友可以參考下2014-08-08詳解JS如何解決大數(shù)據(jù)下滾動(dòng)頁(yè)面卡頓問(wèn)題
之前遇到不分頁(yè)直接獲取到全部數(shù)據(jù),前端滾動(dòng)查看數(shù)據(jù),頁(yè)面就挺卡頓的,所以這篇文章來(lái)和大家聊聊如何解決這一問(wèn)題,感興趣的小伙伴可以了解下2023-07-07如何使用JavaScript檢測(cè)空閑的瀏覽器選項(xiàng)卡
這篇文章主要介紹了如何使用JavaScript檢測(cè)空閑的瀏覽器選項(xiàng)卡,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05