webpack學習筆記(四) 自動編譯


我們每次修改代碼之后,如果想要在瀏覽器中看到變化,都先要手動編譯代碼,這樣未免有些麻煩

在 webpack 中,配置某些選項可以幫助我們在代碼發生變化之后自動編譯代碼

1、存在問題

首先我們搭建一個簡單的項目,感受一下在不使用自動編譯之前項目開發的狀態

創建一個空文件夾 Demo,作為項目的根目錄,在該目錄下運行如下命令安裝項目所需依賴

> # 創建 package.json 文件
> npm init -y
> # 安裝 webpack
> npm install --save-dev webpack
> npm install --save-dev webpack-cli
> # 安裝 lodash
> npm install --save lodash

然后我們在根目錄下創建 distsrc 目錄,並在相應的目錄下創建相應的文件,最終的目錄結構如下

Demo
	- package.json
	- package-lock.json
	- webpack.config.js
	+ node_modules
	+ src
		- index.js
	+ dist
		- index.html

webpack.config.js 文件內容,指定 webpack 的一些基本配置

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    }
};

package.json 文件內容,添加打包命令 npm run build

{
    "name": "Demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --config webpack.config.js"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.39.2",
        "webpack-cli": "^3.3.7"
    },
    "dependencies": {
        "lodash": "^4.17.15"
    }
}

/dist/index.html 文件內容,引入打包之后的 bundle.js文件

<!doctype html>
<html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <script src="bundle.js"></script>
    </body>
</html>

/src/index.js 文件內容,創建一個 div,並將其作為 body 的子節點

import _ from 'lodash';

function component() {
    var element = document.createElement('div');
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');
    return element;
}

document.body.appendChild(component());

至此,一個粗糙的 Demo 就搭建完成啦,運行構建命令即可完成打包

> npm run build

這時用瀏覽器打開 /dist/index.html 文件,應該可以看到 Hello webpack 的文字

好了,現在假如我們要對項目作一點小小的修改,讓屏幕上顯示的文字變成 Hello World

很簡單,對吧!只需要修改 /src/index.js 文件的一點內容就行

import _ from 'lodash';

function component() {
    var element = document.createElement('div');
    // 將 webpack 改成 World 就好 
    element.innerHTML = _.join(['Hello', 'World'], ' ');
    return element;
}

document.body.appendChild(component());

但是,這時候我們又要重新運行構建命令 npm run build 才能使改動生效

這樣很不方便,特別是對於前端的代碼,有時候的確需要反反復復修改和編譯十幾次乃至幾十次

2、解決問題

那么,有沒有一種方法可以使改動之后的代碼( 保存之后 )自動編譯呢?答案是肯定的

webpack 中有兩種常見的方法實現這種效果

(1)watch mode

第一種方法是使用 watch mode,顧名思義,就是可以在觀察到代碼發生變化之后自動編譯代碼

我們可以通過 webpack 的命令行參數 --watch 指定使用,這樣當代碼發生變化后,webpack 將會自動編譯

> npx webpack --config webpack.config.js --watch

或者我們可以加上 npm script 腳本,方便以后使用,修改 package.json 文件如下

{
    "name": "Demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --config webpack.config.js",
        "watch": "npx webpack --config webpack.config.js --watch"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.39.2",
        "webpack-cli": "^3.3.7"
    },
    "dependencies": {
        "lodash": "^4.17.15"
    }
}

好,開啟觀察模式

> npm run watch

現在修改代碼,保存文件,刷新瀏覽器,應該就能看到修改之后的效果啦,唯一的缺點就是瀏覽器不會自動刷新

(2)webpack-dev-server

第二種方法是使用 webpack-dev-server,提供一個簡單的 web 服務器,實時加載

首先,我們安裝一下模塊

> npm install --save-dev webpack-dev-server

然后在 webpack.config.js 文件寫下相關配置

告訴 server 應該在 localhost:8080 下建立服務,然后將 dist 目錄下的文件設置為可訪問

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    // 開啟開發服務器
    devServer: {
        contentBase: './dist'
    }
};

也是添加一個 npm script 腳本,方便以后使用,修改 package.json 文件如下

{
    "name": "Demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --config webpack.config.js",
        "watch": "webpack --config webpack.config.js --watch",
        "start": "webpack-dev-server --open"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.39.2",
        "webpack-cli": "^3.3.7"
    },
    "dependencies": {
        "lodash": "^4.17.15"
    }
}

好,現在開啟開發服務器

> npm start

之后修改代碼,保存文件,應該能夠看到瀏覽器自動刷新,並且展示修改之后的結果

【 閱讀更多 webpack 系列文章,請看 webpack學習筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM