webpack的安裝與使用

安裝

本地安裝

進(jìn)入項(xiàng)目文件夾,運(yùn)行 npm init -y,生成 package.json 文件

// package.json
{
  "name": "webpackdemo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "4",
    "webpack-cli": "3"
  }
}



運(yùn)行以下兩種命令其一,生成 node_modules 文件

yarn add webpack@4 webpack-cli@3 --dev
npm install webpack@4 webpack-cli@3 --dev
node_modules

進(jìn)入 webpack 文件所在目錄,通過(guò) .\node_modules\.bin\webpack --xxx 對(duì)其進(jìn)行操作

注意:當(dāng)前webpack只是本地安裝,安裝在當(dāng)前項(xiàng)目中,因此對(duì) webpack 進(jìn)行操作時(shí),需要進(jìn)入webpack所在目錄方可操作

查詢 webpack 版本號(hào)

全局安裝

安裝最新或特定版本
npm install --global webpack

注意:不推薦全局安裝 webpack。這會(huì)將你項(xiàng)目中的 webpack 鎖定到指定版本,并且在使用不同的 webpack 版本的項(xiàng)目中,可能會(huì)導(dǎo)致構(gòu)建失敗。

最新版本安裝

npm install webpack@beta
npm install webpack/webpack#<tagname/branchname>

注意:最新版本中可能仍包含bug,因此不適合用于生產(chǎn)環(huán)境


配置

webpack 轉(zhuǎn)譯 JS

執(zhí)行命令:
npx webpack

初始化 webpack.config.js

運(yùn)行 npx webpack 命令時(shí),可能會(huì)碰到報(bào)錯(cuò)如下:

The 'mode' option has not been set, webpack will fallback to 'production' fThe 'mode' option has not been set, webpack will fallback to 'production' fThe 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaul
ts for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/

原因是沒有指定mode導(dǎo)致,
解決方法:
創(chuàng)建 webpack.config.js 文件

// webpack.config.js 
module.exports = {
// mode取值可為 development 或 production
// 開發(fā)模式為 development,發(fā)布模式為 production
    mode: 'development',
};

webpack.config.js 中配置 entry 和 output

var path = require('path');

// webpack.config.js 中添加 entry 和output 配置
module.exports = {
// entry 為指定默認(rèn)入口文件
    entry: './foo.js',
    output: {
// 轉(zhuǎn)譯后輸出目錄,不寫則默認(rèn)為dist目錄
        path: path.resolve(__dirname, 'dist'),
// 轉(zhuǎn)譯后輸出文件
        filename: 'foo.bundle.js'
// 或者可以寫成,dist 中輸出文件名后會(huì)出現(xiàn)十六位 hash 數(shù),利于 http 緩存更新
// 
        filename:'[name].[hash].js'
    }
};

http 緩存:當(dāng)用戶訪問某網(wǎng)站后,網(wǎng)站在加載完 index.html 后,會(huì)將請(qǐng)求的 css、js 等資源緩存一段時(shí)間,在這段時(shí)間內(nèi),用戶再次訪問此網(wǎng)站時(shí),只需要下載index.html,頁(yè)面可從硬盤燈內(nèi)存中得到css、js第已緩存資源,以實(shí)現(xiàn)快速訪問。為文件添加十六位hash數(shù),使得頁(yè)面資源更新時(shí),可以生成新的對(duì)應(yīng)文件,與舊文件進(jìn)行區(qū)分,從而告知瀏覽器需要請(qǐng)新的資源,利于 http 緩存更新。

build 配置

由于每次更新會(huì)在 dist 中產(chǎn)生新的帶有十六位 hash 的文件,從而導(dǎo)致 dist 目錄越來(lái)越大,因此需要每次執(zhí)行前刪除 dist 目錄,在 package.json 文件中添加命令:

// 每次執(zhí)行 npx webpack 前,先刪除 dist 目錄
// npx webpack 可簡(jiǎn)寫為 webpack
"scripts": {
    "build": "rm -rf dist && webpack"
    // 使用 rm -rf 可能會(huì)報(bào)錯(cuò),錯(cuò)誤提示為:
    // 'rm' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。
    // 錯(cuò)誤原因可能:使用了Linux 下的 rm -rf 命令,而你的電腦是windows

    // 可將命令修改成以下 
   "build": "rimraf && webpack"
  },

修改后,打包執(zhí)行命令:

// 命令 1
yarn build;

// 命令 2
npm run build

webpack 插件自動(dòng)生成 html

安裝 html-webpack-plugin
webpack 5

npm install --save-dev html-webpack-plugin
yarn add --dev html-webpack-plugin

webpack 4

npm install --save-dev html-webpack-plugin@4
yarn add --dev html-webpack-plugin@4

在 webpack.config.js 中添加配置文件,會(huì)在 dist 中生成對(duì)應(yīng)文件

var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: '[name].[hash].js'
    },
// html-webpack-plugin
    plugins: [
        new HtmlWebpackPlugin({
            // 指定生成頁(yè)面的title
            title: '123',
            // 生成頁(yè)面以model.html頁(yè)面為模板
            template:'assets/model.html'
        })
    ]
};
// model.html頁(yè)面內(nèi)容
<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
     //用于接收傳入的title
    <title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
    
</body>
</html>
// 在 dist 中生成的 html 頁(yè)面,會(huì)自動(dòng)添加 script
<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>123</title>
</head>
<body>

<script src="main.1ad4c1222cd4658c9413.js"></script></body>
</html>

webpack 解析 css 文件

安裝插件,如果安裝的是webpack 4+,建議 style-loader 安裝2.0以下版本,css-loader 安裝5.0以下版本。
查詢適配版本的方式參考:https://blog.csdn.net/u013594477/article/details/120890184

// 方法1:
yarn add css-loader@version --dev
yarn add style-loader@version --dev


// 方法2:
npm i css-loader@version --dev
npm i style-loader@version --dev

webpack.config.js 配置,添加以下代碼:

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};

webpack-dev-derver 使用

安裝 webpack-dev-derver 插件

yarn add webpack-dev-server --dev

npm  i  webpack-dev-server --dev

webpack.config.js 配置

module.exports = {
    devtool: "inline-source-map",
    devServer:{
          // webpack 4+
          contentBase:'./dist'
         // webpack 5+
          static:'./dist',
         // 開啟端口號(hào),默認(rèn)8080
          port:8080
    },
};

package.json配置

"scripts": {
     // --open 為是否運(yùn)行后自動(dòng)打開瀏覽器,不需要可以刪除
    "start":"webpack-dev-server --open",
  },

運(yùn)行命令,之后在對(duì)應(yīng)端口打開頁(yè)面

yarn strat

npm run start

注意:此命令不會(huì)自動(dòng)生成 dist 目錄,不依賴于 dist 目錄

插件導(dǎo)出 css 文件

安裝,webpack 4+ 建議安裝1.6及以下版本

yarn add mini-css-extract-plugin --dev

npm install mini-css-extract-plugin --dev

webpack.config.js 配置,導(dǎo)出文件默認(rèn)存儲(chǔ)在 dist 目錄,且自動(dòng)鏈入 dist/index.html

module.exports = {
    plugins: [
        new MiniCssExtractPlugin({
            // name可以自行指定,指定格式為 index.css,不指定則默認(rèn)為main
            filename: '[name].[hash].css',
            chunkFilename: '[id].[hash].css',
            ignoreOrder:false,
        }),
    ],
    module: {
        rules: [
            // css 導(dǎo)出
            {
                test: /\.css$/i,
                use: [MiniCssExtractPlugin.loader, "css-loader"],
            },
        ],
    },
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容