devtool、devServer、hmr熱替換

1、devtool:

1、設(shè)置sourcemap: 源碼與bundle文件的關(guān)系映射文件。開發(fā)模式中常用,可以我們查找到源文件,快速定位bug。
2、設(shè)置inline-source-map:刪除.map文件,把map文件寫入到bundle文件中,再對(duì)應(yīng)bundle文件的最后一行。
3、設(shè)置inline-cheap-source-map:只輸出的錯(cuò)誤信息只精確到行數(shù),不精確到列數(shù)。
4、設(shè)置inline-cheap-moudule-source-map: 打印第三方模塊的錯(cuò)誤信息。
5、hidden-source-map: 用在生產(chǎn)上需要查看錯(cuò)誤信息,但是又不想暴露源碼。
webpack-dev-server:
npm install webpack-dev-server -D
package.json配置:


image.png

2、webpack-dev-server

默認(rèn)webpack-dev-server會(huì)進(jìn)行熱更新,即項(xiàng)目文件發(fā)生了修改,會(huì)自動(dòng)進(jìn)行打包。會(huì)將打包的文件放入到本地。默認(rèn)端口8080
一些配置情況如下:

devServer: {
    contentBase: "./dist", // 輸出位置
    open: true, // 項(xiàng)目開啟時(shí)是否默認(rèn)打開流浪器網(wǎng)址
    port: 8081, // 端口
    proxy: { // 本地代理
      "/api": {
        target: "http://localhost:9092",
      },
    },
  },

3、Hot Module Replacement (HMR:熱模塊替換):就是當(dāng)修改某個(gè)模塊時(shí),模塊刷新,但是瀏覽器不刷新。

css模塊HMR
啟動(dòng)hmr

devServer: {
 contentBase: "./dist",
 open: true,
 hot:true,
 //即便HMR不?效,瀏覽器也不?動(dòng)刷新,就開啟hotOnly
 hotOnly:true
 },

配置?件頭部引?webpack

const webpack = require("webpack");

在插件配置處添加:

plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
    template: "src/index.html"
    }),
    new webpack.HotModuleReplacementPlugin()
 ],

index.js

import "./css/index.css";
var btn = document.createElement("button");
btn.innerHTML = "新增";
document.body.appendChild(btn);
btn.onclick = function() {
var div = document.createElement("div");
div.innerHTML = "item";
document.body.appendChild(div);
};

index.css

div:nth-of-type(odd) {
background: yellow; }

JS模塊HMR
需要使?module.hot.accept來(lái)觀察模塊更新 從?更新
counter.js

function counter() {
var div = document.createElement("div");
div.setAttribute("id", "counter");
div.innerHTML = 1;
div.onclick = function() {
div.innerHTML = parseInt(div.innerHTML, 10) + 1;
 };
document.body.appendChild(div);
}
export default counter;

number.js

function number() {
var div = document.createElement("div");
div.setAttribute("id", "number");
div.innerHTML = 13000;
document.body.appendChild(div);
}
export default number;

//index.js

import counter from "./counter";
import number from "./number";
counter();
number();
if (module.hot) {
module.hot.accept("./b", function() {
document.body.removeChild(document.getElementById("number"));
number();
 });
}

hmr熱更新,webpack loader中有提供,我這里想介紹一下hmr原理。
原理:
webpack會(huì)監(jiān)聽項(xiàng)目的模塊,每個(gè)模塊都有唯一的id作為標(biāo)識(shí)。當(dāng)某個(gè)模塊的內(nèi)容發(fā)生變化了,通過(guò)模塊id查找到對(duì)應(yīng)的模塊,然后進(jìn)行刪除后重建模塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容