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

咱們每次修改代碼以後,若是想要在瀏覽器中看到變化,都先要手動編譯代碼,這樣未免有些麻煩javascript

在 webpack 中,配置某些選項能夠幫助咱們在代碼發生變化以後自動編譯代碼html

一、存在問題

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

建立一個空文件夾 Demo,做爲項目的根目錄,在該目錄下運行以下命令安裝項目所需依賴java

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

而後咱們在根目錄下建立 distsrc 目錄,並在相應的目錄下建立相應的文件,最終的目錄結構以下node

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

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

const path = require('path');

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

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

{
    "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文件shell

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

/src/index.js 文件內容,建立一個 div,並將其做爲 body 的子節點npm

import _ from 'lodash';

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

document.body.appendChild(component());

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

> 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 才能使改動生效

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

二、解決問題

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

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學習筆記

相關文章
相關標籤/搜索