国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端工程化第一章:webpack基礎(chǔ)(上)

這篇具有很好參考價(jià)值的文章主要介紹了前端工程化第一章:webpack基礎(chǔ)(上)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 什么是webpack?

Webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器。它是一個(gè)用于將代碼編譯成瀏覽器可識(shí)別的格式的工具。

webpack 可以實(shí)現(xiàn)以下的功能:

  • 代碼轉(zhuǎn)換TypeScript 編譯成 JavaScript、SCSSless 編譯成 CSS 等。
  • 文件優(yōu)化:壓縮 JavaScript、CSSHTML 代碼,壓縮合并圖片等。
  • 代碼分割提取多個(gè)頁面的公共代碼、提取首屏不需要執(zhí)行部分的代碼讓其異步加載。
  • 模塊合并:在采用模塊化的項(xiàng)目里會(huì)有很多個(gè)模塊和文件,需要構(gòu)建功能把模塊分類合并成一個(gè)文件。
  • 自動(dòng)刷新:監(jiān)聽本地源代碼的變化,自動(dòng)重新構(gòu)建、刷新瀏覽器。
  • 代碼校驗(yàn):在代碼被提交到倉庫前需要校驗(yàn)代碼是否符合規(guī)范,以及單元測試是否通過。
  • 自動(dòng)發(fā)布:更新完代碼后,自動(dòng)構(gòu)建出線上發(fā)布代碼并傳輸給發(fā)布系統(tǒng)。
  • 依賴管理:通過分析模塊之間的依賴關(guān)系,自動(dòng)加載所需的依賴模塊。
  • 插件擴(kuò)展:通過插件擴(kuò)展功能,滿足不同項(xiàng)目的需求。

構(gòu)建其實(shí)是工程化、自動(dòng)化思想在前端開發(fā)中的體現(xiàn),把一系列流程用代碼去實(shí)現(xiàn),讓代碼自動(dòng)化地執(zhí)行這一系列復(fù)雜的流程。 構(gòu)建給前端開發(fā)注入了更大的活力,解放了我們的生產(chǎn)力。

Webpack 的工作原理是從一個(gè)入口文件開始,遞歸地解析出所有的依賴,然后將這些依賴打包成一個(gè)或多個(gè)輸出文件。Webpack 支持多種模塊化規(guī)范,包括 CommonJS、AMD、ES6 模塊等。

2. webpack使用

2.2. 前置知識(shí)

  • node基礎(chǔ)
  • 包的理解
  • 模塊化思想

2.1. 創(chuàng)建一個(gè)項(xiàng)目

  1. 創(chuàng)建一個(gè)文件夾

  2. 創(chuàng)建一個(gè)package.json文件

    npm init -y
    

    前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

  3. 安裝依賴

      npm install webpack webpack-cli  webpack-dev-server style-loader css-loader html-webpack-plugin cross-env mini-css-extract-plugin less less-loader postcss postcss-loader autoprefixer @babel/core @babel/preset-env babel-loader typescript ts-loader @babel/preset-typescript  eslint eslint-webpack-plugin eslint-config-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node @typescript-eslint/eslint-plugin --save
    

    前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3. webpack打包

3.1. 創(chuàng)建一個(gè)webpack.config.js文件

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

webpack中文文檔

3.2. 入口(entry)

  • entry 選項(xiàng)用于指定 Webpack 打包的入口文件,即告訴 Webpack 從哪個(gè)文件開始打包

3.2.1. webpack.config.js

module.exports = {
  entry: "./src/index.js",
};

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.2.2. src/index.js

let a = 1;
console.log(a);

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.2.3. package.json

"scripts": {
    "build": "webpack"
  },

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js
運(yùn)行 npm run build 查看結(jié)果
默認(rèn)生成了一個(gè)dist文件,這就是打包后的代碼。

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.3. 輸出(output)

  • output 選項(xiàng)用于指定 Webpack 打包后輸出的文件和路徑,即告訴 Webpack 打包后的文件應(yīng)該放在哪個(gè)目錄下以及如何命名
  • output 通常配置為一個(gè)對(duì)象,包含了多個(gè)屬性
    • path 指定了打包文件的輸出路徑,必須是一個(gè)絕對(duì)路徑
    • filename 指定了打包后的文件名,可以包含路徑信息

3.3.1. webpack.config.js

const path = require("path"); // nodeJs 的 path 模塊

module.exports = {
  // entry:默認(rèn)的路徑是src/index.js,也可以自定義
  entry: "./src/index.js",
  output: {
  	// 打包文件的輸出位置
    path: path.resolve(__dirname, "dist"), 
    // 打包后的文件名
    filename: "index.js", 
  },
};

運(yùn)行 npm run build 之后的效果:

  1. 根文件下生成了一個(gè) dist 文件夾,作為打包后輸出文件
  2. dist 中生成了一個(gè) index.js 文件。由默認(rèn)的 main.js 文件變成了我們自定義的 index.js 文件,其他內(nèi)容沒有變化。
    前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.4. 加載器(loader)

  • loaderWebpack 的一個(gè)關(guān)鍵功能,它可以處理各種各樣的文件類型。
  • Webpack 將一切文件視為模塊,但只有 JS 模塊才能被直接運(yùn)行和使用
  • Loader 可以將非 JS 模塊(如CSS、圖片等)轉(zhuǎn)換為 Webpack 可以處理的有效模塊
  • loader 是在“webpack.config.js”文件中使用“module”屬性指定的。每個(gè)loader 都定義為一個(gè)對(duì)象,該對(duì)象具有指定 loader 應(yīng)處理哪些文件的“test” 屬性和指定要使用的加載程序的 “use” 屬性。

例如,loader可以用于將Sass或Less文件轉(zhuǎn)換為CSS,或者將ES6代碼轉(zhuǎn)換為可以由舊瀏覽器執(zhí)行的ES5代碼。

3.4.1. src/index.js

import "./index.css";
console.log(123);

3.4.2. src/index.css

body {
  background-color: red;
  color: blue;
}

注意:此時(shí)運(yùn)行npm run build 會(huì)報(bào)錯(cuò),由于瀏覽器只認(rèn)識(shí)js代碼,因此在webpack中需要將其他的代碼進(jìn)行處理,此時(shí)需要使用style-loader、css-loader來處理我們的css代碼

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.4.3. webpack.config.js

  • 每個(gè) Loader 規(guī)則由兩部分組成:匹配條件處理方式
  • 匹配條件通常使用正則表達(dá)式,用于匹配需要被轉(zhuǎn)換的文件
  • 處理方式則是具體的轉(zhuǎn)換操作
    • test 屬性指定了匹配的文件類型
    • use 屬性指定了轉(zhuǎn)換方式
    • exclude 用于指定哪些文件或目錄不應(yīng)該被 loader 處理
    • css-loader 作用是將CSS代碼轉(zhuǎn)換為JavaScript代碼
    • css-loader 可以識(shí)別 @importurl() 等語句,實(shí)現(xiàn) CSS 模塊的引用和解析
    • style-loader 用于將 css-loader 轉(zhuǎn)換后的 JavaScript 對(duì)象,以 style 標(biāo)簽的形式動(dòng)態(tài)插入到 HTML 文件中(動(dòng)態(tài)創(chuàng)建style標(biāo)簽,然后放到head標(biāo)簽中)
module.exports = {
  // ......
  module: {
    rules: [
		{
	      test: /\.css$/, // 匹配以 .css 結(jié)尾的文件
	      use: ["style-loader", "css-loader"], // 注意:loader執(zhí)行順序是從后往前執(zhí)行,順序不能改變
	    },
	]
  },
};

可以看到,此時(shí)運(yùn)行 npm run build 已經(jīng)打包成功了

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js
測試:在dist目錄下創(chuàng)建一個(gè)html文件,測試一下樣式是否生效

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js
可以看到,此時(shí)樣式已經(jīng)生效了

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

例子:css代碼通過loader轉(zhuǎn)換成瀏覽器可識(shí)別代碼的模擬過程(偽代碼)

/**
 * 模擬 css 樣式大概轉(zhuǎn)換過程
 */

// 1. webpack 將css讀取出來
let cssCode = `body {
  background-color: red;
  color: blue;
}`;

// 2. css-loader將css代碼轉(zhuǎn)換成js代碼
let cssModule = `
  module.exports = "
    body {
      background-color: red;
      color: blue;
    }
  "
`;

// 3. style-loader將css-loader轉(zhuǎn)換的內(nèi)容經(jīng)過處理。放到動(dòng)態(tài)創(chuàng)建的style標(biāo)簽中,變成瀏覽器能讀取的代碼
let style = document.createComment("style");
style.innerHTML = cssModule;
document.head.appendChild(style);

3.5. 插件(plugin)

Webpack 插件是用于擴(kuò)展 Webpack 功能的 JavaScript 對(duì)象。它們可以用于各種用途,例如打包輸出優(yōu)化、資源管理代碼壓縮等。以下是一些常見的 Webpack 插件及其功能:

  1. UglifyJSPlugin:用于壓縮 JavaScript 代碼,減少文件大小并提高頁面加載速度。
  2. HtmlWebpackPlugin:用于生成 HTML 文件,并將打包后的 JavaScript 和 CSS 文件自動(dòng)添加到 HTML 文件中。
  3. ExtractTextWebpackPlugin:用于將 CSS 代碼從 JavaScript 文件中提取出來,并將其保存為單獨(dú)的 CSS 文件。
  4. CleanWebpackPlugin:用于在打包之前清除之前的打包文件。
  5. CopyWebpackPlugin:用于將文件或文件夾從源目錄復(fù)制到輸出目錄。
  6. ProvidePlugin:用于自動(dòng)加載模塊,而不必使用 import 或 require 語句。

例子:通過 HtmlWebpackPlugin 插件生成 HTML 文件,并將打包后的 JavaScriptCSS 文件自動(dòng)添加到 HTML 文件中

  1. 創(chuàng)建模板文件 src/index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>模板文件</title>
</head>
<body>
  模板文件
</body>
</html>
  1. webpack.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 生成html的插件,并自動(dòng)將打包后的 JS、CSS 文件引入 HTML 文件中

module.exports = {
  // ......
  module: {
  	// ......
  },
  plugins: [
    // 插件使用時(shí),像構(gòu)造函數(shù)一樣直接 new 即可
    // template:模板文件的路徑
    // filename:打包后生成的文件名
    // chunk:代碼塊
    new HtmlWebpackPlugin({ template: "./src/index.html" }),
  ],
};
  1. 運(yùn)行 npm run build,查看打包后的 dist 文件,此時(shí)已經(jīng)生成了index.html 文件

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

3.6. devServer

  • webpack-dev-server是一個(gè)基于 ExpressWeb 服務(wù)器,它可以為 Webpack 打包后的代碼提供一個(gè)本地開發(fā)環(huán)境,支持實(shí)時(shí)刷新、熱替換自動(dòng)構(gòu)建等功能,大大提高了開發(fā)效率
    • static:靜態(tài)資源目錄的路徑,設(shè)置該參數(shù)可以在服務(wù)器中訪問這些靜態(tài)資源
    • compress:啟用 gzip 壓縮,默認(rèn)是關(guān)閉的
    • port:服務(wù)器端口,默認(rèn)是 8080
    • host:服務(wù)器主機(jī)名,默認(rèn)是 localhost
    • open:是否自動(dòng)在瀏覽器中打開頁面,默認(rèn)是關(guān)閉的
    • hot:啟用模塊熱替換功能,默認(rèn)是關(guān)閉的
    • watchFiles:需要監(jiān)聽的文件列表,當(dāng)這些文件發(fā)生變化時(shí),自動(dòng)重啟服務(wù)器
    • historyApiFallback:參數(shù)用于設(shè)置是否啟用 HTML5 歷史記錄 API,用于處理單頁應(yīng)用的路由問題。默認(rèn)情況下,當(dāng)使用瀏覽器的前進(jìn)/后退按鈕時(shí),devServer 會(huì)嘗試根據(jù) URL 路徑查找對(duì)應(yīng)的靜態(tài)資源,如果找不到就返回 404。如果啟用了 historyApiFallback,則會(huì)將這些請(qǐng)求重定向到 index.html,然后交給前端路由來處理
  • 在命令行中運(yùn)行 webpack-dev-server 命令后,webpack-dev-server 將會(huì)啟動(dòng)一個(gè)本地 Web 服務(wù)器,并監(jiān)聽我們定義的端口。我們可以在瀏覽器中訪問 http://localhost:9000,即可預(yù)覽打包后的頁面,并實(shí)現(xiàn)實(shí)時(shí)刷新熱替換功能

3.6.1. webpack.config.js

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

devServer: {
   static: path.join(__dirname, "public"), // 靜態(tài)資源路徑
   compress: true, // 是否開始gzip壓縮
   host: "localhost", // 服務(wù)器主機(jī)名
   port: 80, // 服務(wù)器端口名
   open: true, //啟動(dòng)項(xiàng)目后是否自動(dòng)打開瀏覽器
   hot: true, // 是否啟動(dòng)模塊熱替功能
   historyApiFallback: true, // 處理單頁應(yīng)用的路由問題
   watchFiles: ["src/**/*.js", "src/**/*.css"], // 需要監(jiān)聽的文件列表,當(dāng)這些文件發(fā)生變化時(shí),自動(dòng)重啟服務(wù)器
 },

3.6.2. package.json

前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js

"scripts": {
    "dev": "webpack serve",
    "build": "webpack"
  },

運(yùn)行 npm run dev,可以發(fā)現(xiàn)此時(shí)項(xiàng)目已經(jīng)啟動(dòng)了
前端工程化第一章:webpack基礎(chǔ)(上),webpack學(xué)習(xí),前端,webpack,node.js文章來源地址http://www.zghlxwxcb.cn/news/detail-583220.html

到了這里,關(guān)于前端工程化第一章:webpack基礎(chǔ)(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【前端工程化面試題】使用 webpack 來優(yōu)化前端性能/ webpack的功能

    這個(gè)題目實(shí)際上就是來回答 webpack 是干啥的,你對(duì)webpack的理解,都是一個(gè)問題。 (1)對(duì) webpack 的理解 webpack 為啥提出 + webpack 是啥 + webpack 的主要功能 前端開發(fā)通常是基于模塊化的,為了提高開發(fā)效率,webpack 是一個(gè)基于模塊的構(gòu)建工具,是一個(gè)用于 js 應(yīng)用程序的靜態(tài)模塊

    2024年02月20日
    瀏覽(95)
  • 【前端工程化面試題目】webpack 的熱更新原理

    【前端工程化面試題目】webpack 的熱更新原理

    可以在順便學(xué)習(xí)一下 vite 的熱更新原理,請(qǐng)參考這篇文章。 首先有幾個(gè)知識(shí)點(diǎn)需要明確 熱更新是針對(duì)開發(fā)過程中的開發(fā)服務(wù)器的,也就是 webpack-dev-server webpack 的熱更新不需要額外的插件,但是需要在配置文件中 devServer 屬性中配置 hot: true,需要安裝?webpack-dev-server 這個(gè)

    2024年02月19日
    瀏覽(95)
  • 前端面試:【前端工程化】構(gòu)建工具Webpack、Parcel和Rollup

    嗨,親愛的前端開發(fā)者!在現(xiàn)代Web開發(fā)中,前端工程化變得愈發(fā)重要。構(gòu)建工具如Webpack、Parcel和Rollup幫助我們自動(dòng)化任務(wù)、管理依賴、優(yōu)化性能等。本文將深入探討這三個(gè)前端構(gòu)建工具,幫助你了解它們的優(yōu)點(diǎn)和用途。 1. Webpack: 用途: Webpack是一個(gè)強(qiáng)大的模塊打包工具。它

    2024年02月11日
    瀏覽(121)
  • 【前端工程化面試題】說一下 webpack 的構(gòu)建流程

    類似問題是,說一下 vite 的構(gòu)建流程,參考這篇文章。 初始化流程 從配置文件和shell 語句中讀取合并參數(shù),初始化需要使用的插件和執(zhí)行環(huán)境所需要的參數(shù) 配置文件默認(rèn)是 webpack.config.js 編譯構(gòu)建流程 解析入口模塊,從入口模塊開始串行調(diào)用對(duì)應(yīng)的loader 去翻譯文件內(nèi)容,依

    2024年02月20日
    瀏覽(97)
  • Vue3學(xué)習(xí)-01_前端工程化與webpack

    最近在學(xué)習(xí)Vue知識(shí),參照的教程是黑馬程序員官網(wǎng)提供的免費(fèi)前端教程,這里記錄一下自己的學(xué)習(xí)筆記以及遇到的相關(guān)問題。 前端工程化指的是:在企業(yè)級(jí)的前端項(xiàng)目開發(fā)中,把前端開發(fā)所需的工具、技術(shù)、流程、經(jīng)驗(yàn)等進(jìn)行規(guī)范化、標(biāo)準(zhǔn)化。最終落實(shí)到細(xì)節(jié)上,就是實(shí)現(xiàn)前

    2024年02月13日
    瀏覽(30)
  • 【前端工程化面試題】如何優(yōu)化提高 webpack 的構(gòu)建速度

    【前端工程化面試題】如何優(yōu)化提高 webpack 的構(gòu)建速度

    使用最新版本的 Webpack 和相關(guān)插件 : 每個(gè)新版本的 Webpack 都會(huì)帶來性能方面的改進(jìn)和優(yōu)化,因此始終確保你在使用最新版本。同時(shí),更新你的相關(guān)插件也是同樣重要的。 使用DllPlugin動(dòng)態(tài)鏈接庫: 使用DllPlugin和DllReferencePlugin來將第三方庫的代碼進(jìn)行預(yù)打包,減少構(gòu)建時(shí)間。這個(gè)

    2024年02月19日
    瀏覽(96)
  • 前端工程化之:webpack4-1(babel的安裝和使用)

    前端工程化之:webpack4-1(babel的安裝和使用)

    官網(wǎng):https://babeljs.io/ 民間中文網(wǎng):https://www.babeljs.cn/ ?babel一詞來自于希伯來語,直譯為巴別塔。 巴別塔象征的統(tǒng)一的國度、統(tǒng)一的語言 而今天的 JS 世界缺少一座巴別塔,不同版本的瀏覽器能識(shí)別的 ES 標(biāo)準(zhǔn)并不相同,就導(dǎo)致了開發(fā)者面對(duì)不同版本的瀏覽器要使用不同的語言

    2024年02月21日
    瀏覽(68)
  • 【前端工程化面試題】webpack的module、bundle、chunk分別指的是什么?

    首先從語法方面 在配置文件中有 module 這個(gè)配置項(xiàng),里面有 rules 選項(xiàng)用來配置各種 loader,還有其他各種選項(xiàng),參考官網(wǎng)。 bundle 和?chunk 在配置文件中是沒有這個(gè)選項(xiàng)的,但是會(huì)出現(xiàn)在配置的值中。 module 模塊 指單個(gè)文件,可以是 js、css、圖片等, 每個(gè)文件都是一個(gè)獨(dú)立的模

    2024年02月19日
    瀏覽(89)
  • 【前端工程化面試題】webpack proxy的工作原理,為什么能解決跨域問題

    【前端工程化面試題】webpack proxy的工作原理,為什么能解決跨域問題

    在 webpack 的配置文件 webpack.config.js 中有一個(gè)配置項(xiàng) devServer 里面有一個(gè)屬性是 proxy,這里面可以配置代理服務(wù)器,解決跨域問題,請(qǐng)參考官網(wǎng)。 一般來說 webpack 的代理就是說的開發(fā)服務(wù)器 webpack-dev-server。 其實(shí)不光是 webpack 其他的打包工具比如是 vite,也有代理的功能,也是

    2024年02月21日
    瀏覽(96)
  • Javaweb基礎(chǔ)-前端工程化學(xué)習(xí)筆記

    Javaweb基礎(chǔ)-前端工程化學(xué)習(xí)筆記

    變量與模版字符串 let 和var的差別: const和var的差異 1、新增const和let類似,只是const定義的變量不能修改 2、并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址所保存的數(shù)據(jù)不得改動(dòng)。 模板字符串(template string)是增強(qiáng)版的字符串,用反引號(hào)(`)標(biāo)識(shí) 1、字符串中可以

    2024年02月20日
    瀏覽(101)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包