Webpack安裝配置及打包詳細過程

来源:https://www.cnblogs.com/aizai846/archive/2019/09/10/11497508.html
-Advertisement-
Play Games

前端經過漫長的發展,涌現出了很多實踐方法來處理複雜的工作流程,讓開發變得更加簡便,其中,模塊化可以使複雜的程式細化成為各個小的文件,而webpack並不強制你使用某種模塊化方案,而是通過相容所有模塊化方案讓你無痛接入項目,本文詳細介紹webpack安裝配置及打包的詳細過程。 ...


引言

前端經過漫長的發展,涌現出了很多實踐方法來處理複雜的工作流程,讓開發變得更加簡便,其中,模塊化可以使複雜的程式細化成為各個小的文件,而webpack並不強制你使用某種模塊化方案,而是通過相容所有模塊化方案讓你無痛接入項目,本文詳細介紹webpack安裝配置及打包的詳細過程。

Webpack簡單介紹

本質上,webpack 是一個現代 JavaScript 應用程式的靜態模塊打包器(module bundler)。當 webpack 處理應用程式時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程式需要的每個模塊,然後將所有這些模塊打包成一個或多個 bundle

其中包含四個核心概念

  • 入口(entry):指示 webpack 應該使用哪個模塊,來作為構建其內部依賴圖的開始。進入入口起點後,webpack 會找出有哪些模塊和庫是入口起點(直接和間接)依賴的
  • 輸出(output):告訴 webpack 在哪裡輸出它所創建的 bundles,以及如何命名這些文件,預設值為 ./dist
  • loader:讓 webpack 能夠去處理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)
  • 插件(plugins):插件則可以用於執行範圍更廣的任務。插件的範圍包括,從打包優化和壓縮,一直到重新定義環境中的變數。插件介面功能極其強大,可以用來處理各種各樣的任務。

通過官網的一張圖,可以說明webpack的強大,如下所示:

打包步驟

接下來詳細介紹webpack安裝配置及打包的詳細過程

安裝node.js

可以參考上篇博客Node.js安裝詳細步驟教程(Windows),這裡不再重覆書寫。

 全局安裝webpack

運行CMD,安裝命令如下所示,其中, -g是全局安裝,並移除安裝了 webpack和webpack-cli

npm install webpack webpack-cli –g

創建本地項目文件夾

創建項目本地文件夾,如“D:\TestWebpack”,在CMD命令窗中分別輸入如下命令,切換到該目錄

D:                 //切換到D盤
cd D:\TestWebpack //切換到項目目錄

本地安裝webpack

輸入如下命令,在項目目錄中安裝webpack,其中,--save-dev是本地安裝

npm install webpack webpack-cli --save-dev

查看webpack 版本

輸入如下命令,若出現版本號,說明安裝成功。

webpack -v

創建package.json文件

輸入如下命令,將在項目目錄中自動生成package.json文件

npm init -y

配置打包目錄

在項目目錄下,新建config文件夾,用於存放配置文件;src文件夾,用於存放源碼;out文件夾,用於存放打包生成文件,具體如下圖所示。

 添加webpack.config.js文件

在config文件夾中添加webpack.config.js文件,並添加如下代碼:

const path=require('path'); //調用node.js中的路徑
module.exports={
    entry:{
        index:'./src/js/index.js' //需要打包的文件
    },
    output:{
        filename:'[name].js',    //輸入的文件名是什麼,生成的文件名也是什麼
        path:path.resolve(__dirname,'../out') //指定生成的文件目錄
    },
    mode:"development"    //開發模式,沒有對js等文件壓縮,預設生成的是壓縮文件
}

運行webpack

在cmd命令窗體中,輸入如下命令,運行成功後,在out目錄中會生成打包後的index.js

webpack --config config/webpack.config.js

 配置package.json

每次輸入命令webpack --config config/webpack.config.js,太長,且非常不方便,此時我們可以在package.json文件中配置,如下所示:

{
  "name": "TestWebpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack --config config/webpack.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^3.0.0",
    "webpack": "^4.39.3",
    "webpack-cli": "^3.3.8"
  }
}

配置完成後,我們輸入的如下命令,可以直接打包。

npm run start

JS緩存問題的處理

通過哈希值解決JS緩存問題(在沒有修改JS要打包的內容時,不會重新打包一個JS文件),修改webpack.config.js文件,具體代碼如下:

const path=require('path');
module.exports={
    entry:{
        index:'./src/js/index.js'
    },
    output:{
        filename:'[name].[chunkhash:8].js',//增加8位的哈希值
        path:path.resolve(__dirname,'../out')
    },
    mode:"development",
}

安裝webpack插件clean-webpack-plugin

通過clean-webpack-plugin插件刪除輸出目中之前舊的文件。

安裝命令
npm install --save-dev clean-webpack-plugin
用法一
const path=require('path');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports={
    entry:{
        index:'./src/js/index.js'
    },
    output:{
        filename:'[name].[chunkhash:8].js',
        path:path.resolve(__dirname,'../out')
    },
    mode:"development",
    plugins:[
        new CleanWebpackPlugin()        
    ]
}
用法二
const path=require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin').CleanWebpackPlugin ;
module.exports={
    entry:{
        index:'./src/js/index.js'
    },
    output:{
        filename:'[name].[chunkhash:8].js',
        path:path.resolve(__dirname,'../out')
    },
    mode:"development",
    plugins:[
        new CleanWebpackPlugin()        
    ]
}

 配置完後,我們再次運行npm run start,此時out目錄中,只有一個新生成的js文件,如下圖所示。

 

總結

至此,我們完成從webpack安裝、配置、打包等一系列步驟。以上詳細步驟,全部經過筆者測試通過,如果在安裝或使用過程中出現問題,歡迎留言交流,如果本文對你有所幫助,希望關註支持下。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 騰訊位置服務地圖SDK是一套提供多種地理位置服務的應用程式介面。通過調用該介面,開發者可以在自己的應用中加入地圖相關的功能(如地圖展示、標註、繪製圖形等),輕鬆訪問騰訊地圖服務和數據,構建功能豐富、交互性強、符合各種行業場景的地圖類應用程式。 以下內容轉載自iOS 工程師Genosage的文章《地圖 ...
  • 一、精靈圖練習 練習:用精靈圖表示出“RUI” 工具:Adobe Fireworks 方法:(1)打開Adobe Fireworks(2)選取一張26個英文字母圖片 (3)先把我們這張圖片的圖層鎖定,原因:防止圖片被修改,不可恢復 按圖片中的順序進行操作。 (4)按順序進行選取,選擇裁剪工具(我們的 ...
  • 前言 第一次接觸到 ES6 中的 class 和 extends 時,就聽人說這兩個關鍵字不過是語法糖而已。它們的本質還是 ES3 的構造函數,原型鏈那些東西,沒有什麼新鮮的,只要理解了原型鏈等這些概念自然就明白了。這話說的沒錯,但是這些繼承的實現是否是我們想的那樣呢,今天讓我們來用原型鏈解釋下 E ...
  • 轉載自:https://blog.csdn.net/wo_shi_ma_nong/article/details/100713151 。 react-service是一個非常簡單的用來在react、react native中進行狀態維護的包。 其用法非常簡單,只有有限的幾個屬性和方法,非常好用。 官 ...
  • 前言 小程式本身是不支持async/await語法的,但有些應用場景,我們使用async/await會使得代碼更簡潔,也更易於維護,用過都知道是有多爽的。既然小程式不支持,那我們可以藉助 fackbook 開源的 regenerator 來完成這一功能。 前面我也百度過一些方法,但很多方法都行不通, ...
  • 示例代碼托管在: "http://www.github.com/dashnowords/blogs" 博客園地址: "《大史住在大前端》原創博文目錄" 華為雲社區地址: "【你要的前端打怪升級指南】" [TOC] 一. 簡述 模塊Vue框架中用於模板編譯的,它的作用就是將Vue中的組件模板轉換成 函 ...
  • 1. "el input" 2. "強制監聽" ...
  • 一、js對象是由鍵和值組成,操作是以地址進行。 當兩個對象指向同一個地址時,修改其中任意一個的值,另外一個值也會被改變。如下例: let obj = {'key' : '0' , 'value' : '1'}; //聲明1個對象 let newObj = obj; //新對象指向obj,此時兩個對象 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...