webpack4前端工程化教程(一)

来源:https://www.cnblogs.com/lightzone/archive/2018/11/08/9931918.html
-Advertisement-
Play Games

本文作為webpack小白入門文章,會詳細地介紹webpack的用途、具體的安裝步驟、註意事項、一些基本的配置項,並且會以一個具體的項目實例來介紹如何使用webpack。另外,本文會簡單地介紹一些最新的webpack4在安裝、使用中需要註意的要點。 ...


-本文作為webpack小白入門文章,會詳細地介紹webpack的用途、具體的安裝步驟、註意事項、一些基本的配置項,並且會以一個具體的項目實例來介紹如何使用webpack。另外,本文會簡單地介紹一些最新的webpack4在安裝、使用中需要註意的要點。

為什麼需要webpack

隨著前端的飛速發展,我們的網頁也越來越複雜,隨之帶來的是越來越臃腫的前端代碼。不同業務功能代碼經常放在一起,以下問題逐漸凸顯:

  1. 代碼結構不清晰,結構混雜,後期維護困難

  2. 網頁資源沒按照順序載入,js執行過程不清晰

  3. 引入大量頁面不需要的代碼,降低瀏覽器載入速度

  4. 入口頁面載入了過多不會立即執行的代碼

 

隨著node.js的誕生,grunt,gulp,webpack等前端構建工具應運而生。那麼什麼是構建工具呢?

 

前端構建工具就是把開發環境的代碼轉化成運行環境代碼。一般來說,開發環境的代碼是為了更好的閱讀,而運行環境的代碼則是為了能夠更快地執行。以前我們寫前端代碼的時候,js,css,html文件都是寫好就直接丟到生產環境運行起來了。而現在藉助構建工具我們會把前端代碼經過壓縮、預編譯、模塊化和打包處理後才會發佈到生產環境。那這些構建工具有什麼區別呢?

 

grunt、gulp只具備編譯壓縮合併功能,經過處理後的前端資源沒有經過模塊化處理,資源之間沒有依賴性,如下圖:

 

但是Webpack不僅具有它們所具備的這些編譯壓縮合併功能,同時還具備模塊化開發和組件式開發等優點,在目前流行的前端框架React和Vue中也得到很好的支持。處理後的資源如下圖:

 

webpack安裝

首先安裝node.js

在node.js官網下載對應操作系統版本安裝後執行以下命令檢查node.js 版本:

node -v

 

初始化node.js項目:新建文件夾demo1,在命令行切換到demo目錄下然後執行

npm init -y

 

以上命令會在demo1目錄下生成一個package.json文件,包含node.js項目說明,內容如下。 -y選項是會以預設值初始化package.json中的配置,如果你不發佈你的項目到npm,這寫都不重要。註意package.json裡面的main配置要和你的入口js文件一致。

 

{

 "name": "demo1",

 "version": "1.0.0",

 "description": "",

 "main": "index.js",

 "scripts": {

   "test": "echo \"Error: no test specified\" && exit 1"

 },

 "keywords": [],

 "author": "",

 "license": "ISC"

}

  

安裝webpack

npm install --save-dev webpack

npm install --save-dev webpack-cli

 

在命令行執行以上命令後會創建node_modules文件夾並安裝webpack,webpack-cli相關依賴。如果你需要安裝特定版本的webpack,運行一下命令

npm install --save-dev webpack@<version>

 

其中<version>換成你想安裝的版本號。

 

項目實例

安裝好webpack後在demo1/下麵創建index.js:

const Foo = require('./foo');

document.body.appendChild(Foo())

 

再新建foo.js:

module.exports = function() {
   let dom = document.createElement('div');
   dom.innerHTML = 'foo';
   return dom;
}

  

最後新建index.html:

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, initial-scale=1.0">

   <meta http-equiv="X-UA-Compatible" content="ie=edge">

   <title>index</title>

</head>

<body>
 
   <script src="./dist/main.js"></script>

</body>

</html>

 

在命令行執行:

npx webpack index.js -o  dist/main.js

 

然後會在demo1/dist/文件夾下 生成main.js,打開index.html在瀏覽器中可以看到 頁面顯示 "foo"。

npx 會幫你執行依賴包里的二進位文件。如果你不想加這個選項的話可以執行以下命令全局安裝webpack:

npm install --save-dev webpack

npm install --save-dev webpack-cli

 

使用webpack配置文件

如果每次我們都通過命令行傳入參數那就太麻煩了而且容易出錯,wepack提供了--config 命令行參數讓我們 傳入配置文件。

新建webpack.config.js:

const path = require('path');

const webpack = require('webpack');

module.exports = {

   mode: 'development',

   entry: {

       app: path.resolve(__dirname, './index.js'),  //唯一入口文件,__dirname是nodejs里的一個全局變數,它指向的是被執行 js 文件的絕對路徑

   },

   output: {

       path: path.resolve(__dirname, './dist'), //打包後的文件存放的地方

       filename: 'main.js'   //打包後輸出文件的文件名

   }

}

  

mode用於指定webpack的工作模式,預設為production,produciton模式下會自動壓縮生成的文件。開發模式下 建議指定為development。

然後在package.json裡面添加配置選項:

"scripts": {

    "start": "webpack --config webpack.config.js"

},

 

在命令行執行:

npm start

 

同樣也會在demo1/dist/下生成main.js,打開index.html可以看到同樣效果。

 

好了,到這裡你已經掌握了webpack基本知識和最初級的配置。接下來的文章我會繼續講解webpack開發過程中用到的loader和plugins。webpack更像是一個工具的集成,有了這些loader和plugins你的開發才會如虎添翼。

-END-

 

如果你覺得本文對你有用,請轉發支持一下

長按並識別下方二維碼,點擊關註,即可獲取最新走心文章

記得把我設為星標或置頂哦

在公眾號後臺回覆“前端資源”即可獲取最新前端開發資源


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

-Advertisement-
Play Games
更多相關文章
  • 參考鏈接 步驟:適配所有的模擬器和真機 ——生成.a文件 <1>建一個靜態庫工程 <2>生成.a文件(註意添加類.h和.m文件) 同理:接入任意款真機,同上述操作,生成真機的.a文件; <4>合併模擬器和真機.a文件,並生成新的.a文件——此處把模擬器和真機的.a文件剪切到了桌面上,也可以不用放到桌 ...
  • Google自2017年第一次提出Flutter, 到2018年Beta, 再加之RN的各種風波與問題, 使得Flutter的熱度不斷上升, 國內不少公司都公佈Flutter在其產品中的應用, 如美團, 閑魚等. ...
  • 表單: 表單是一個包含表單元素的區域。 表單元素是允許用戶在表單中輸入內容,比如:文本域(textarea)、下拉列表、單選框(radio-buttons)、覆選框(checkboxes)等等。 表單使用表單標簽 <form> 來設置: 輸入元素 多數情況下被用到的表單標簽是輸入標簽(<input> ...
  • 一、前言 在 Vue 中,我們可以很方便的將數據使用插值表達式( Mustache 語法)的方式渲染到頁面元素中,但是插值表達式的設計初衷是用於簡單運算,即我們不應該對差值做過多的操作。當我們需要對差值做進一步的處理時,這時,我們就應該使用到 Vue 中的計算屬性來完成這一操作。同時,當差值數據變化 ...
  • 基於Skyline Terra Exploere6.6消息事件和clipboardJS插件實現Terra Explorer 6.6彈出視窗剪切板功能。Terra Explorer 7.0已經預設支持右鍵複製,無特殊要求的話可以不用自己實現。 ...
  • <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script> var car={name:"蘭博基尼"}; var p={ name:"張珊", age:18, car:car }; ...
  • js高級裡面原型鏈對於新手來說並不友好,總的來說就是 任何函數都有自己的原型對象(prototype),任何實例對象都__proto__指向構造函數的原型 先來個最簡單的原型三角關係 var fn = new Fn(); 實例對象不能直接訪問構造函數而是通過訪問構造函數的原型間接訪問構造函數 現在直 ...
  • 直接上代碼 //封裝的ajax函數 // 傳一個對象,所有要用的參數都在對象中 因為不寫對象 實參列表個數太多,所以像jq一樣,調用ajax也是把對象當實際參數傳進去 // type 請求方式 預設get // url 請求地址 這個必須要有,沒有直接 return 後面都不需要判斷 // asyn ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...