webpack熱模組替換(HMR)/熱更新
這是一篇關於webpack熱模組替換的最簡單的配置(不需要react),也稱作熱更新。
模組熱替換(HMR)的作用是,在應用執行時,無需重新整理頁面,便能替換、增加、刪除必要的模組。 HMR
對於那些由單一狀態樹構成的應用非常有用。因為這些應用的元件是 “dumb” (相對於 “smart”)
的,所以在元件的程式碼更改後,元件的狀態依然能夠正確反映應用的最新狀態。
webpack-dev-server內建“live reload”,會自動重新整理頁面。
檔案目錄如下:
- app
- a.js
- component.js
- index.js
- node_modules
- package.json
- webpack.config.js
component.js中匯入了a.js。index.js匯入了component.js。修改任意一個檔案,都能達到熱更新功能。
最重要的是,在index.js中,有這樣一段程式碼:(完成熱更新必須需要)
if(module.hot){
module.hot.accept(moduleId, callback);
}
下面是package.json配置:
{
"name": "webpack-hmr",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts ": {
"start": "nodemon --watch webpack.config.js --exec \"webpack-dev-server --env development\"",
"build": "webpack --env production"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"html-webpack-plugin": "^2.28.0",
"nodemon": "^1.11.0",
"webpack": "^2.2.1" ,
"webpack-dev-server": "^2.4.1"
}
}
從依賴就可以看到,這真的是一個最簡單的配置了。其中nodemon用來監聽webpack.config.js檔案的狀態,只要發生改變,就重新執行命令。
在這裡,定義了兩個命令,一個是start,用於開發環境;一個是build,用於生產環境。--watch
用來監聽一個或者多個檔案,--exec
是nodemon用來執行其它的命令。具體的配置請看:https://c9.io/remy/nodemon。
接下來是webpack.config.js了,既然package.json的scripts中定義了兩種命令,我們還是要在配置檔案中實現兩種情況(development和production,你也可以修改配置其中一種)。
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const PATHS = {
app: path.join(__dirname, 'app'),
build: path.join(__dirname, 'build'),
};
const commonConfig={
entry: {
app: PATHS.app + '/index.js',
},
output: {
path: PATHS.build,
filename: '[name].js',
},
watch: true,
plugins: [
new HtmlWebpackPlugin({
title: 'Webpack demo',
}),
],
}
function developmentConfig(){
const config ={
devServer:{
historyApiFallback:true, //404s fallback to ./index.html
// hotOnly:true, 使用hotOnly和hot都可以
hot: true,
stats:'errors-only', //只在發生錯誤時輸出
// host:process.env.Host, 這裡是undefined,參考的別人文章有這個
// port:process.env.PORT, 這裡是undefined,參考的別人文章有這個
overlay:{ //當有編譯錯誤或者警告的時候顯示一個全屏overlay
errors:true,
warnings:true,
}
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // 更新元件時在控制檯輸出元件的路徑而不是數字ID,用在開發模式
// new webpack.HashedModuleIdsPlugin(), // 用在生產模式
],
};
return Object.assign(
{},
commonConfig,
config,
{
plugins: commonConfig.plugins.concat(config.plugins),
}
);
}
module.exports = function(env){
console.log("env",env);
if(env=='development'){
return developmentConfig();
}
return commonConfig;
};
關於Object.assign,第一個引數是目標物件,如果目標物件中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。後來的源的屬性將類似地覆蓋早先的屬性。淺賦值,對於物件的複製使用=,即引用複製。
env引數通過cli傳入。
然後開啟命令列到當前目錄,執行npm start
或者npm run build
就好啦。注意,前者是在開發環境下,是沒有輸出檔案的(在記憶體),只有執行後者才會有輸出檔案。
參考
相關推薦
webpack熱模組替換(HMR)/熱更新
這是一篇關於webpack熱模組替換的最簡單的配置(不需要react),也稱作熱更新。 模組熱替換(HMR)的作用是,在應用執行時,無需重新整理頁面,便能替換、增加、刪除必要的模組。 HMR 對於那些由單一狀態樹構成的應用非常有用。因為這些應用的元
webpack之熱模組替換(七)
熱模組替換的實現有兩種方式,一種是webpack-dev-server和webpack內建的HMR 外掛的結合使用;一種是利用webpack-hot-middleware中介軟體。本文記錄第二種使
SpringBoot(二)——熱部署(springloader)
方式 問題 開發 簡單 tool ade world 操作 最新 SpringBoot(二)——熱部署(springloader) 一、問題的提出: 在編寫代碼的時候,有時只是簡單把打印信息改變了,就需要重新部署SpringBoot項目,如果是這樣的編
爬蟲_豆瓣全部正在熱映電影 (xpath)
post cin mali span odin -a douban size pos 單純地練習一下xpath 1 import requests 2 from lxml import etree 3 4 5 def get_url(url):
爬蟲_電影天堂 熱映電影(xpath)
name while 思路 html com ges turn element def 寫了一天才寫了不到100行。不過總歸是按自己的思路完成了 1 import requests 2 from lxml import etree 3 import t
Linux USB 驅動開發(四)—— 熱插拔那點事
Linux USB 驅動開發(四)—— 熱插拔那點事 學習USB熱插拔之前,先學習一些USB的硬體知識: 一、USB基礎概念 1、硬體知識(USB插座和插頭) 在最初的標
分享知識-快樂自己:SpringBoot整合熱部署配置(一)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> &l
SpringBoot入門學習(八) ~~ 熱部署整合DataSource
目錄 SpringBoot整合DataSource 一、Spring-boot-starter-parent依賴介紹 SpringBoot依賴格式介紹 二、基成DataSource 【準備工作:】這裡使用Druid的資料來
探秘手淘高可用平臺(三)——熱修復和開發流程
中一 實現思路 全部 框架 一次 atl 高級 mat 模塊 本系列文章根據手機淘寶客戶端基礎架構高級開發工程師非臺在安卓綠色聯盟開發者大會上的分享,共分三篇,介紹手淘技術團隊性能和穩定性系統化提升方案EMAS-MOTU的設計原理以及實現思路。 本文重點介紹手淘高可用平臺
Spring Boot學習筆記(五)熱部署-devtools
第一步,pom.xml中加入依賴和外掛 依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g
熱修復探究(一)
Android ClassLoader 前言 這次部落格會分兩篇,這篇介紹各個Android版本是怎麼反射載入生成的patch檔案的,下篇會詳細的分析class對比和patch的生成。 寫這次文章的原因是因為最近在研究熱修復,發現其實他們實現的程式碼很
Android熱修復學習(二)
Multidex 在上一篇(一)中,我們知道應用載入class會用到PathClassLoader,最終會呼叫DexPathList的findClass()方法,通過輪詢Element陣列用DexFile來載入類。而每個Element又對應一個dex單元(檔案
探祕手淘高可用平臺(三)——熱修復和開發流程
本系列文章根據手機淘寶客戶端基礎架構高階開發工程師非臺在安卓綠色聯盟開發者大會上的分享,共分三篇,介紹手淘技術團隊效能和穩定性系統化提升方案EMAS-MOTU的設計原理以及實現思路。 本文重點介紹手淘高可用平臺的熱修復方案和如何全開發流程保障效能及穩定性。 熱修復方案 熱修復有三
Bugly多渠道(Walle)熱更新解決方案
上文中講了騰訊Bugly熱更新的接入和具體使用,還沒使用熱更新的小夥伴可以移步去看一下: 一、Bugly熱更新接入和使用 二、Bugly熱更新+Walle(瓦力)多渠道打包解決方案 三、Bugly熱更新+Walle(瓦力)多渠道打包+應用加固解決方案 這篇文章接著上一篇講
STS熱部署方法(springboot)
sts熱部署,即是在專案中修改程式碼不用重新啟動服務,提高效率。 方法如下: 1.在pom檔案中引入 devtools 依賴: <dependency> <groupId>org.springframework.boot</groupId> <
Android熱修復原理(HotFix)初涉
寫在最前的話,一直聽說熱修復,不錯,最近修復風靡,不明白原理都不行,明白原理了不會用也不行,故打算拿出一些時間去深入瞭解一番 翻閱眾多資料 在此之前先感謝前人的資料提供, 好了 大家和我一起學習吧; * 首先明白幾個類的載入器:classLoader—
postgresql熱備配置(一) postgresql安裝與基礎配置
1、 安裝postgresql假定環境未Centos 6,已安裝gcc 3.6+:yum install https://download.postgresql.org/pub/repos/yum/9
Unity3d熱更新(一):更新思路
首先將資源打包成AssetBundle。如果有兩個物件共同依賴於同一個物件,需要採用依賴關係打包。AssetBundle需要根據不同的平臺打包,各平臺之間不能混用,如IOS和Android。為打包後的資源生成MD5值,上傳伺服器後,通過比對伺服器端和客戶端檔案的MD5值,找出改變的檔案,下載到本地。通過Ass
天天學演算法——搜尋熱詞關聯(TopK)
目錄: 《劍指offer》面試題-topk演算法 搜尋熱詞關聯演算法 程式碼實現以及java學習 寫在前面 每次寫部落格都愛先扯點亂七八糟的東西,這是工作準備寫的第2篇部落格,之前寫過一篇hadoop入門,那裡還留下了一個搜尋引擎的demo沒有去完成,
大數據熱詞科普(五)
數據一致性 任務 就是 共享 tex 重復 程序 nbsp 符號 在前面的文章中我們給大家講述了很多有關大數據的熱詞,我們在這篇文章中給大家介紹結構化數據、半結構化數據、非結構化數據、數據清洗。這些詞匯都是和數據分析有關的,下面我們就給大家詳細地介紹一下這些詞的意思。 首