Webpack 4.X 從入門到精通 - devServer與mode(三)

上一篇文章裏詳細介紹了一下插件的用法,這一篇文章接着豐富module.exports裏的屬性。如今的前端發展已經非常迅速了,伴隨而來的是開發模式的轉變。現在已經不再是寫個靜態頁面並放在瀏覽器裏打開預覽一下了。在實際的開發中會經常需要使用http服務器,比如之前的ajax,想要看到效果就必需搭建一個服務器。搭建服務器的方式有非常的多,而webpack則原生的提供服務器的支持,大家無需再去下載軟件。同時它還提供了自動刷新、熱更新等功能,使開發變得非常方便。

devServer

安裝使用

npm i webpack-dev-server -D

打開終端,並進入到對應的項目裏(我的爲webpack-demo),執行命令webpack-dev-server,如果終端裏顯示如下則表示已經成功開啓服務器
Webpack 4.X 從入門到精通 - devServer與mode(三)

注意:
1、此時可能會提示webpack-dev-server不是內部命令,解決辦法爲在全局再次安裝一下webpack-dev-server模塊,或者在package.json裏的scripts里加上"dev": "webpack-dev-server",然後執行命令npm run dev
2、此時我並沒有通過webpack命令生成一個dist目錄(目錄結構如下圖),然後在瀏覽器裏輸入地址http://localhost:8080/後,頁面會正常顯示。這個原因是devServer會將webpack構建出的文件保存到內存裏,不需要打包生成就能預覽

Webpack 4.X 從入門到精通 - devServer與mode(三)

配置參數

webpack.config.js的內容如下:

const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');

module.exports={
    entry:{
        index:'./src/index.js',
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new HtmlWebpackPlugin({
            title:'陳學輝',
            template:'./src/template.html',
            filename:'index.html',
        })
    ],
    devServer:{
        host:'localhost',   //服務器的ip地址
        port:1573,  //端口
        open:true,  //自動打開頁面
    }
}

index.js文件內容如下:

console.log('這是入口文件');

template.html文件內容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title><%= htmlWebpackPlugin.options.title %></title>
    </head>
    <body>
        <div id="box">這是自帶的div</div>
    </body>
</html>

執行命令webpack-dev-server後,瀏覽器會自動打開頁面,同時如果修改index.js文件後瀏覽器會自動刷新,如下圖:
Webpack 4.X 從入門到精通 - devServer與mode(三)

熱更新

默認情況下開啓了服務器後,只要入口文件有更新那整個頁面就會重新刷新。如果頁面裏引入的模塊非常多的情況下讓整個頁面刷新就會變得有些慢,這個問題可以交給熱更新去解決。熱更新的意思就是隻更新有改動的模塊(像ajax一樣局部刷新)

使用步驟

1、引入webpack模塊

const webpack=require('webpack');

2、寫入插件

plugins:[
    new HtmlWebpackPlugin({
        title:'陳學輝',
        template:'./src/template.html',
        filename:'index.html',
    }),
    new webpack.HotModuleReplacementPlugin()    //引入熱更新插件
]

3、devServer裏增加hot參數

devServer:{
    host:'localhost',   //服務器的ip地址
    port:1573,  //端口
    open:true,  //自動打開頁面,
    hot:true,   //開啓熱更新
}

此時並不能看出效果,到後面的文章裏講loader的時候就可以看出來效果
devServer的其它配置:https://webpack.docschina.org/configuration/dev-server/

mode

modewebpack4新增的一條屬性,它的意思爲當前開發的環境。mode的到來減少了很多的配置,它內置了很多的功能。相較以前的版本提升了很多,減少了很多專門的配置

  1. 提升了構建速度
  2. 默認爲開發環境,不需要專門配置
  3. 提供壓縮功能,不需要藉助插件
  4. 提供SouceMap,不需要專門配置

mode分爲兩種環境,一種是開發環境(development),一種是生產環境(production)。開發環境就是我們寫代碼的環境,生產環境就是代碼放到線上的環境。這兩種環境的最直觀區別就是,開發環境的代碼不提供壓縮,生產環境的代碼提供壓縮。

使用方式1:在命令後面添加

webpack --mode development
webpack --mode production

使用方式2:在package.json裏添加

"scripts": {
    "build": "webpack --mode production",
    "dev": "webpack-dev-server --mode development"
  },

此時後成dist目錄用的是生產環境,打開服務器用的是開發環境,然後通過命令執行npm run build或者npm run dev,它們的區別如下
dist目錄裏的index.bundle.js內容如下:
Webpack 4.X 從入門到精通 - devServer與mode(三)
http://localhost:1573/index.bundle.js內容如下
Webpack 4.X 從入門到精通 - devServer與mode(三)

資料下載

下一篇:Webpack 4.X 從入門到精通 - module(四)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章