webpack編譯打包基本配置


webpack 是一種前端資源構建工具,一個靜態模塊打包器(module bundler)。在webpack 看來, 前端的所有資源文件(js/json/css/img/less/...)都會作為模塊處理。

它將根據模塊的依賴關系進行靜態分析,打包生成對應的靜態資源(bundle)。

當在 index.html 中引入 index.less 文件和 index.js 文件時,瀏覽器並不能解析

less 文件需要編譯成 css ,才能被瀏覽器識別,通過 import 語法引入的 jQuery 也不能被瀏覽器識別

index.js

 index.less

 因此,webpack 可以把這些都處理為瀏覽器能夠識別的,

 webpack 能夠編譯打包 js 和 json文件,能夠將 es6 的模塊話語法轉換成瀏覽器能識別的語法,能壓縮代碼

index.js 入口文件中,加載相應的文件:

 然后,初始化 package.json , npm init -y

下載並安裝 webpack :本地安裝 npm install webpack webpack-cli -D

創建文件 webpack.config.js,webpack 的配置文件,當運行 npx webpack 指令時,會加載里面的配置,配置內容:

// resolve用來拼接絕對路徑的方法
const { resolve } = require('path');

module.exports = {   //所有構建工具都是基於nodejs平台運行的~模塊化默認采用commonjs
    entry: './src/index.js',    // 入口起點
    output: {     // 輸出
        filename: 'bundle.js',     // 輸出文件名
        path: resolve(__dirname, 'build')    // 輸出路徑 , __dirname nodejs的變量,代表當前文件的目錄絕對路徑, https://juejin.im/post/5cb341596fb9a068553e1818
    },
    module: {    // loader的配置 , 不同文件必須配置不同loader處理
        rules: [
            {
                test: /\.css$/,    // 匹配哪些文件
                use: [         // 使用哪些loader進行處理, use數組中loader執行順序:從右到左,從下到上 依次執行
                    'style-loader',  //創建style標簽,將js中的樣式資源插入進行,添加到head中生效
                    'css-loader'      // 將css文件變成commonjs模塊加載js中,里面內容是樣式字符串
                ]
            },
            {
                test: /\.less$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'less-loader'  // 將less文件編譯成css文件 , 需要下載 less-loader和less
                ]
            }
        ]
    },
    mode: 'development', // 開發模式
}

運行指令:npx webpack 

這樣,就將 index.js 及其依賴項都打包成一個 bundle.js 文件

 在 index.html 文件中引入 bundle.js,瀏覽器成功識別了

webpack 根據 index.js 找到所有的依賴項,

將 index.less,先通過 less-loader 將 less 文件編譯成 css文件,接着通過 css-loader 將 css文件變成 CommonJS 模塊加載到 js中,里面內容是樣式字符串,最后使用 style-loader ,創建 style  標簽,將 js 中的樣式資源插入進去,添加到 head 中生效,

同時 也將 es6 模塊化語法加載的 jQuery,也處理為瀏覽器能夠識別的語法

 

入口(entry):

  入口起點,指示 webpack 應該使用哪個模塊,來作為構造其內部依賴圖的開始,進入入口起點后,webpack會找出有哪些模塊和庫是入口起點(直接和間接)依賴的。

  可以通過在 webpack 配置中配置 entry 屬性,來指定一個入口起點(或多個入口起點),默認為 ./src

  單個入口(簡寫)語法:

    entry : ' ./src/index.js ' (簡寫)  

    entry : {

      main : ' ./src/index.js ' 

    }

  對象語法:

    entry : {

      app : ' ./src/app.js ' ,

      test : ' . /src/test.js '

    }

  

出口(output):

  output 屬性告訴 webpack 在哪里輸出它所創建的 bundles,以及如何命名這些文件,默認為 ./dist

  注意,即使可以存在多個 入口起點,但是只指定一個輸出配置。

  webpack 中 配置 output 屬性的最低要求是,將它的值設置為一個對象,包括以下兩點:

    filename:用於輸出文件的文件名

    目標輸出目錄 path 的絕對路徑

  如果配置創建了多個單獨的 chunk,例如,使用多個入口起點或使用像 CommonsChunkPlugin 這樣的插件,則應該使用占位符來確保每個文件具有唯一的名臣稱。

   entry: {   app: './src/app.js',   search: './src/search.js'   },   output: {   filename: '[name].js',   path: __dirname + '/dist'   }   }   // 寫入到硬盤:./dist/app.js, ./dist/search.js

loader:

  loader 用於對模塊的源代碼進行轉換,loader 可以使你在 import 或 “加載” 模塊時預處理文件。因此,loader 類似於其他構建工具中的 "任務(task)",並提供了處理前端構建步驟的強大方法。

  loader 讓 webpack 能夠去處理 非 js 文件,如 Typescript(webpack 自身只理解 js ),l或將內聯圖像轉換為 data URL 。 loader 甚至允許你直接在 JavaScript 模塊中 import  CSS 文件 !loader 可以將所有類型的文件轉換成 webpack 能夠處理的有效模塊,然后就可以利用 webpack 的打包能力,對它們進行處理。

  使用 loader  三種方式:

    配置:在 webpack.config.js 文件中指定 loader(推薦)

    內聯:在每個 import 語句中或任何等效於“ import ” 的方式中 顯示指定 loader,使用 ! 將資源中的 loader 分開,分開的每個部分都相當於當前目錄解析。

       import Styles from 'style-loader!css-loader?modules!./styles.css';

    CLI:在 shell 命令中指定它們

       webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'

       這會對 .jade 文件使用 jade-loader,對 .css 文件使用 style-loader 和 css-loader

  在更高層面,在 webpack 的配置中 loader 有兩個目標:

    test 屬性:用戶標識出應該被對應的 loader 進行轉換的 某個或某些文件(匹配什么文件)

    use 屬性:表示進行轉換時,應該使用哪個 loader

插件(plugins):

  loader 被用於轉換某些類型的模塊,而插件則可以用於執行范圍更廣的任務。插件的范圍包括,從打包優化和壓縮,一直到重新定義環境中的變量,插件接口功能極其強大,可以用來處理各種各樣的任務。

  插件目的在於解決 loader 無法實現的其他事情。

  使用一個插件,只需要 require() 它,然后把它添加到 plugins 數組中,多數插件可以通過選項 option 自定義,也可以在一個配置文件中因為不同目的而多次使用同一個插件,此時需要通過使用 new 操作符來創建一個它的實例。

模式(mode):

  通過選擇 development 或 production ,來設置 mode,可以啟用相應模式下的 webpack 內置的優化。

  用法:只在配置中提供 mode 選項,或者 從 CLI 參數中傳遞 webpack --mode=production

模塊(modules):

  webpack模塊:對於 Node.js 模塊,webpack 模塊能夠以各種方式表達它們的依賴關系,如:

         ① ES2015 import 語句

            ② CommonJS require90 語句

          ③ AMD define 和 require 語句

          ④ css/sass/less 文件中的 @import 語句

          ⑤ 樣式 url(......) 或 HTML 文件 <img src="......" /> 中的圖片鏈接 image url

配置(configuration):

  webpack 的配置文件,是導出一個對象的 JavaScript 文件,因為 webpack 配置是標准的 Node.js CommonJS模塊,你可以做到以下事情:①通過 require(... )  導入其他文件

  ②通過 require(... ) 使用 npm 的工具函數

  ③使用JavaScript 的控制流表達式,例如 ? : 操作符

  ④對常用值使用常量或變量

  ⑤編寫並執行函數來生成部分配置

 


免責聲明!

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



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