express製作小型熱載入打包webpack--react篇
node 伺服器的main.js檔案
var opn = require('opn') // 開啟瀏覽器
var path = require('path') // 路徑模組
var express = require('express') // express框架
var webpack = require('webpack') //核心模組webpack
var webpackConfig = require('./webpack.config')// 配置檔案
var port = webpackConfig.devServer.port
var app = express()
var compiler = webpack(webpackConfig)
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
// quiet: true
})
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: false,
heartbeat: 2000
})
app.use(require('connect-history-api-fallback')())
//開啟 支援history路由
app.use(devMiddleware) // 伺服器webpack外掛
app.use(hotMiddleware) // 熱載入自動打包
app.use('./static', express.static('./static'))
var uri = 'http://localhost:' + port
var _resolve
var readyPromise = new Promise(resolve => {
_resolve = resolve
})
console.log('> Starting dev server...')
devMiddleware.waitUntilValid(() => {
console.log('> Listening at ' + uri + '\n')
if (process.env.NODE_ENV !== 'testing') {
opn(uri)
}
_resolve()
})
var server = app.listen(port)
module.exports = {
ready: readyPromise,
close: () => {
server.close()
}
}
webpack配置檔案
const path=require("path")
const HtmlWebpackPlugin=require("html-webpack-plugin")//用於把HTML頁面放入記憶體
// const vueload=require("vue-loader/lib/plugin")
const minicss=require("mini-css-extract-plugin")//webpack4.0以後的打包css檔案
const optimizecssassetswebpackplugin=require("optimize-css-assets-webpack-plugin")//壓縮如果你使用ui元件庫已經壓縮的css就別必要了
const webpack = require("webpack")
const clernWebpackPlugin = require('clean-webpack-plugin')
const htmlplugin=new HtmlWebpackPlugin({
template:path.join(__dirname,'./src/index.html'),//源標頭檔案
filename:"index.html",//生成首頁的檔名稱
minify: {
removeAttributeQuotes: true,
collapseWhitespace: true
}
})
const css=new minicss({//輸出css獨立檔案
filename:"./css/[name].css",
chunkFilename:"[name].css"//或者id
})
module.exports={//webpack基於node構建的
mode: "development",
entry: ['webpack-hot-middleware/client', './src/index.js'],
output: {
filename: 'main.[hash:8].js',//通過熱載入輸出script檔案掛載在目錄與index.HTML一樣
path: path.resolve(__dirname, 'dist')
},
watch: true,
watchOptions:{
poll:1000,
// aggregateTimeOut: 500,
ignored: /node_modules/
},
//production 提供了約定大於配置 約定打包檔案是src/index ->dist/main
plugins:[
htmlplugin,
// new vueload() ,
css,
new webpack.HotModuleReplacementPlugin()
// new clernWebpackPlugin('./dist')
],
module: {//所以第三方模組的配置規則
rules: [
{
test: /\.js|.jsx$/,
loader: 'babel-loader',
exclude:/node_modules/
},
{
test: /\.scss$/,
use:[{loader:minicss.loader}, {
loader: 'css-loader',
options: { modules: true }
},'sass-loader']
},
{
test: /\.tsx$/,
loader: 'ts-loader',
options: { appendTsSuffixTo: [/\.vue$/] },
exclude:/node_modules/
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000
}
},
// { test:/\.js|\jsx$/,use:[{loader:"babel-loader",options:{cacheDirectory:true}}],exclude:/node_modules/},//一個屬性use:"babel-loader"兩個是陣列
// // { test:/\.css/,use:['style-loader','css-loader']},
{test:/\.css$/,use:[{loader:minicss.loader},'css-loader']},
// { test:/\.scss/,use:['style-loader', {loader: "css-loader",
// options: {//這個是react的css模組化
// modules: {
// localIdentName: "[path][name]-[local]-[hash:5]"
// }//import css from '路徑' console.log(css)會生成模組
// //這是react的處理辦法 vue就是style裡面寫scoped
// //支援id與class 控制檯輸出的模組是健對值形式
// }//css scss less一樣的配置模組化
// }]},
{ test:/\.(jpg|PNG|png|jpeg)/,use:[{loader:"url-loader",options:{
outputPath:"images/",
limit:1024,//單位是B 大於這個會打包出來
name:"[name].[ext]"
}}]},
// { test:/.vue$/,use:[{loader:"vue-loader"}]},
]
},
devtool:"source-map",//inline把js打包在一個檔案裡面 hidden分離出來 eval也是分離
// optimization:{//程式碼分割 下面vendors就是分割程式碼之後(把相同的庫或者檔案都提出來打包) 你可能在想css檔案去哪了 你登出程式碼分割 你可以看見css資料夾
// splitChunks:{
// chunks:"all"
// }
// },
resolve: {
// 將 `.ts` 新增為一個可解析的副檔名。
extensions: ['.js','.jsx','.tsx','.json']
},
devServer: {
port: 8080,
hot: true,
grogress: true,
historyApiFallback: true
//true 表示webpack支援使用history false路由預設是hash
}
}
執行的index.js檔案
import React from 'react'//建立元件虛擬dom 生命週期
import ReactDOM from 'react-dom'//把建立的元件虛擬dom放到頁面上展示的
import Router from './router/router'
import {store} from './redux/redux' // 只有index才預設選中
import {Provider} from '../node_modules/react-redux'
//import 'react-hot-loader'; 沒有報錯可以註釋
import { hot } from 'react-hot-loader/root';
const App = () => <div>Hello World1!
<Provider store={store}>
<Router />,
</Provider>,
</div>;
const Wpp = hot(App)
ReactDOM.render(
<Wpp/>,
document.getElementById("app")
)
babelrc
{
"presets": ["env","stage-0","react"],
"plugins": ["transform-runtime","react-hot-loader/babel"]
}
相關文章
- express製作小型熱載入打包webpackExpressWeb
- kubernetes實戰篇之docker映象的打包與載入Docker
- 製作遊戲載入進度條遊戲
- 動畫特效製作軟體:Express Animate mac動畫特效ExpressMac
- springboot熱載入Spring Boot
- node.js,express入門看詳細篇Node.jsExpress
- Demo示例——Bundle打包和載入
- 一篇文章搞懂熱修復類載入方案原理
- 簡述grub啟動載入程式和製作kickstart檔案
- Express快速入門Express
- php webman使用fileboy熱載入PHPWeb
- webpack中的熱重新整理與熱載入Web
- 直播平臺製作,Glide載入網路圖,進度條顯示IDE
- jquery製作圖片瀑布流點選按鈕載入更多內容jQuery
- Python實現模組熱載入Python
- 從Java的類載入機制談起:聊聊Java中如何實現熱部署(熱載入)Java熱部署
- Express原始碼學習-路由篇Express原始碼路由
- 三篇文件學會使用casperjs製作爬蟲JS爬蟲
- aspnetcore外掛開發dll熱載入NetCore
- node+express+mysql入門ExpressMySql
- VS打包程式製作的快捷方式每次啟動都要windows正在配置Windows
- vue前端製作圖片,並下載(canvase)Vue前端Canvas
- uni-app專案打包成apk(本地打包篇)APPAPK
- Docker 入門系列四:Dockerfile-映象製作Docker
- aspnetcore外掛開發dll熱載入 二NetCore
- Debian 打包入門
- Webpack打包效率優化篇Web優化
- Ae怎麼製作下劃線字型輸入效果?After Effects製作下劃線字型輸入效果的方法
- Phi-3小型和中型下載地址
- 8.Spring Boot 打包與熱部署Spring Boot熱部署
- 想分析最熱門城市?這個人口熱力圖你一定要學會製作
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- 探討大世界遊戲的製作流程及技術——大場景製作技術概況篇遊戲
- 直播平臺製作,登入頁面的切換
- 使用webpack4 配置按需載入,減小lodash打包體積Web
- maven 打包不複製資源Maven
- vue專案打包,解決靜態資源無法載入和路由載入無效(404)問題Vue路由
- 直播平臺製作,html+css復刻登入輸入框HTMLCSS