1. 程式人生 > >webpack 極簡教程(前端自動化構建)

webpack 極簡教程(前端自動化構建)

1233356-926ed47b4f98f089.png

Webpack 是什麼

模組打包器 (module bundler).
能夠將任何資源如 JavaScript 檔案、CSS 檔案、圖片等打包成一個或少數檔案。

Webpack 是一個前端資源載入/打包工具。它將根據模組的依賴關係進行靜態分析,然後將這些模組按照指定的規則生成對應的靜態資源。

1233356-bb5ec73b18c4b436.png image.png

WebPack 做的事情是: 分析你的專案結構,找到JavaScript模組以及其它的一些瀏覽器不能直接執行的拓展語言(Scss,TypeScript等),並將其打包為合適的格式以供瀏覽器使用。

1233356-ee4fe8d2948f4c6a.png

安裝

npm install webpack -g

當前目錄安裝:

npm install webpack webpack-cli  --save-dev

快速上手例項

極簡例子:


1233356-d24363c60ae16fb1.png

index.js

import _ from 'lodash';

function component() {
    let element = document.createElement('div');

    // Lodash, currently included via a script, is required for this line to work
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

    return element;
}

document.body.appendChild(component());

index.html

<!doctype html>
<html>
<head>
    <title>Getting Started</title>
    <!--<script src="https://unpkg.com/[email protected]"></script>-->
</head>
<body>
<script src="main.js"></script>
</body>
</html>

package.json

{
  "name": "hello_webpack",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.26.0",
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "lodash": "^4.17.11"
  }
}

webpack.config.js

const path = require('path');

module.exports = {
    mode: "development", // "production" | "development" | "none"
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'static')
    }
};

注:__dirname 是node.js中的一個全域性變數,它指向當前執行指令碼所在的目錄。

原始碼地址:https://github.com/microu2018/hello_webpack

https://segmentfault.com/a/1190000010871559
https://webpack.js.org/guides/getting-started/
https://github.com/ruanyf/webpack-demos

webpack,gulp/grunt,npm,它們有什麼區別?

webpack 是模組打包器(module bundler),把所有的模組打包成一個或少量檔案,使你只需載入少量檔案即可執行整個應用,而無需像之前那樣載入大量的圖片,css檔案,js檔案,字型檔案等等。

而gulp/grunt 是自動化構建工具,或者叫任務執行器(task runner),是把你所有重複的手動操作讓程式碼來做,例如壓縮JS程式碼、CSS程式碼,程式碼檢查、程式碼編譯等等,自動化構建工具並不能把所有模組打包到一起,也不能構建不同模組之間的依賴圖。

兩者來比較的話,gulp/grunt 無法做模組打包的事,webpack 雖然有 loader 和 plugin可以做一部分 gulp/grunt 能做的事,但是終究 webpack 的外掛還是不如 gulp/grunt 的外掛豐富,能做的事比較有限。

於是有人兩者結合著用,將 webpack 放到 gulp/grunt 中用。然而,更好的方法是用 npm scripts 取代 gulp/grunt.

npm 是 node 的包管理器 (node package manager),用於管理 node 的第三方軟體包,npm 對於任務命令的良好支援讓你最終省卻了編寫任務程式碼的必要,取而代之的,是老祖宗的幾個命令列,僅靠幾句命令列就足以完成你的模組打包和自動化構建的所有需求。