最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript webpack5配置及使用基本介紹

 更新時(shí)間:2022年09月05日 10:25:32   作者:小綿楊Yancy  
webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(module bundler)。這篇文章主要介紹了JavaScript webpack5配置及使用基本介紹

一、webpack

1.1 簡介

在最原始的前端開發(fā)中,我們引入js和css等文件都是通過手動(dòng)地在html中插入script和link標(biāo)簽來達(dá)到引用的目的,不僅繁瑣,每個(gè)文件都需要單獨(dú)發(fā)一次請(qǐng)求,而且容易發(fā)生變量沖突的問題。

于是提出了JavaScript模塊化的概念,依次出現(xiàn)了AMD、CommonJS、CMD、ES6模塊化等解決方案。

但是事實(shí)上,我們工程使用模塊化開發(fā)是不能直接運(yùn)行在瀏覽器上的,例如許多npm模塊都是使用的CommonJS的語法,瀏覽器并不支持。

此時(shí)便到了模塊打包工具出場的時(shí)候了,它的任務(wù)就是解決模塊間的依賴,并將項(xiàng)目打包成瀏覽器能夠識(shí)別的JS文件。

目前社區(qū)流行的打包工具有Webpack、Parcel、Rollup等。

如果你使用過vue-cli或者create-ract-app等腳手架,那么其實(shí)你已經(jīng)用過webpack了,因?yàn)樗麄兌际腔趙ebpack的二次封裝,所以,掌握了webpack的原理,能夠更好地去開發(fā)vue和react工程項(xiàng)目。

1.2 五大核心概念

項(xiàng)目中webpack的配置文件是位于根目錄的:webpack.config.js

entry (入口)

入口起點(diǎn)(entry point)指示 webpack 應(yīng)該使用哪個(gè)模塊,來作為構(gòu)建其內(nèi)部依賴圖的開始,例如vue項(xiàng)目中的main.js就是打包時(shí)的入口文件。

module.exports = {
  entry: './src/main.js'
};

項(xiàng)目中的所有依賴都應(yīng)該直接或者間接地與入口文件關(guān)聯(lián)起來,例如我們都是在main.js中引入外部模塊(axios、router、elementUI等)。

output (出口)

output 屬性告訴 webpack 在哪里輸出它所創(chuàng)建的 bundles,以及如何命名這些文件,默認(rèn)值為 ./dist。

const path = require('path');
module.exports = {
  entry: './src/main.js',
  output: {
  	//__dirname是當(dāng)前目錄根目錄
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  }
};
  • ouput的path屬性決定了打包好的文件的生成位置,默認(rèn)是./dist,如果沒有,webpack會(huì)自動(dòng)創(chuàng)建這個(gè)目錄。
  • ouput的filename屬性決定了打包文件的名稱。

loader

loader 讓 webpack 能夠去處理那些非 JavaScript 文件(例如圖片,css文件、vue文件等,webpack 自身只理解 JavaScript)。

loader 可以將所有類型的文件轉(zhuǎn)換為 webpack 能夠處理的有效模塊,然后你就可以利用 webpack 的打包能力,對(duì)它們進(jìn)行處理。

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

在 webpack 配置中定義 loader 時(shí),要定義在 module.rules 中,其中test屬性是需要匹配的文件名的正則,use屬性是對(duì)應(yīng)的loader,可以是多個(gè)(數(shù)組)。

例如上面的style-loader和css-loader就是處理js中引入的css文件(如果直接在js中引入css文件,是會(huì)報(bào)錯(cuò)的)。

plugin (插件)

oader 被用于轉(zhuǎn)換某些類型的模塊,而插件則可以用于執(zhí)行范圍更廣的任務(wù)。

插件的范圍包括,從打包優(yōu)化和壓縮,一直到重新定義環(huán)境中的變量,插件增強(qiáng)了webpack的功能。

要使用插件,對(duì)于webpack內(nèi)置的插件,我們通過引入webpack然后直接訪問內(nèi)置插件即可,對(duì)于外部插件,我們需要先安裝,然后require引入,然后在plugin數(shù)組引入插件(new)實(shí)例。

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通過 npm 安裝
const webpack = require('webpack'); // 用于訪問內(nèi)置插件
const config = {
  module: {
    rules: [
      //...
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({template: './src/index.html'})
  ]
};
module.exports = config;

上面的html-webpack-plugin插件就是根據(jù)模板(template)頁面在打包的目錄中自動(dòng)生成一個(gè)對(duì)應(yīng)的html文件,并且自動(dòng)插入打包生成js文件的script標(biāo)簽(正常webpack打包并不會(huì)生成html文件)。

mode (模式)

  • 開發(fā)模式(development):優(yōu)化打包速度,優(yōu)化代碼調(diào)試。
  • 生產(chǎn)模式(production):優(yōu)化打包速度,優(yōu)化代碼運(yùn)行的性能

module.exports = {
  mode: 'production'
};

即打包的模式不同,那么webpack對(duì)于打包代碼的優(yōu)化策略也不一樣。

二、配置及使用

我們來搭建一個(gè)非常簡單的webpack項(xiàng)目??。

項(xiàng)目結(jié)構(gòu)

接著我們創(chuàng)建基本的項(xiàng)目結(jié)構(gòu)和文件??。

my-webpack-demo
    ├── src
    |    └── index.js(入口文件)
    ├── utils
    |    └── time.js(時(shí)間工具)
    ├── package-lock.json
    ├── package.json
    ├── webpack.config.js(webpack配置)

其中utils下的time.js負(fù)責(zé)生成當(dāng)前時(shí)間 time.js:

var time = new Date();
var m = time.getMonth() + 1;
var t = time.getFullYear() + "-" + m + "-" + time.getDate() + " " + time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
module.exports = {
  now: t,
};

入口文件index.js:

import { now } from "../utils/time.js";
document.write("現(xiàn)在是: " + now);

webpack配置文件webpack.config.js:

module.exports = {
  entry: "./src/index.js",
  mode: "development",
  output: {
    filename: "index.js",
  },
};

我們?cè)诮K端執(zhí)行打包命令:

此時(shí)webpack自動(dòng)在項(xiàng)目中創(chuàng)建了dist目錄,并生成了打包好的index.js文件,那么我們?nèi)绾悟?yàn)證index.js文件是否有效呢?

使用html-webpack-plugin

由于webpack并不會(huì)自動(dòng)生成html文件,還記得上面的html-webpack-plugin插件嗎?

通過npm安裝:

在配置文件中引入:

const HtmlWebpackPlugin = require("html-webpack-plugin"); // 通過 npm 安裝
module.exports = {
  entry: "./src/index.js",
  mode: "development",
  output: {
    filename: "index.js",
  },
  plugins: [new HtmlWebpackPlugin({ template: "./src/index.html", scriptLoading: "blocking" })],
};

記得在src下創(chuàng)建index.html模板:

歐克!我們?cè)俅螆?zhí)行打包命令npx webpack ??。

可以看到,在dist目錄下不僅生成了index.js,還有index.html,我們?cè)跒g覽器中打開它???。

time.js成功生效咯 ?!

三、寫在最后

我們完成了一個(gè)非常簡單的webpack項(xiàng)目,你是否發(fā)現(xiàn)了這和vue項(xiàng)目的打包流程十分相似呢?

只是vue-cli的功能是十分強(qiáng)大的,例如可以解析vue文件,熱更新等等……

所以這也驗(yàn)證了開始說的,vue-cli是對(duì)webpack的二次封裝,封裝了許多l(xiāng)oader和plugin,并且配置好了入口,出口等配置信息,我們可以拿來就用。

到此這篇關(guān)于JavaScript webpack5配置及使用基本介紹的文章就介紹到這了,更多相關(guān)JS webpack5內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript 獲取事件對(duì)象的注意點(diǎn)

    JavaScript 獲取事件對(duì)象的注意點(diǎn)

    平時(shí)我們獲取事件對(duì)象一定要將firefox考慮進(jìn)去。
    2009-07-07
  • 微信小程序自定義底部導(dǎo)航帶跳轉(zhuǎn)功能

    微信小程序自定義底部導(dǎo)航帶跳轉(zhuǎn)功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序自定義底部導(dǎo)航帶跳轉(zhuǎn)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • javascript解析json數(shù)據(jù)的3種方式

    javascript解析json數(shù)據(jù)的3種方式

    這篇文章主要介紹了解析json數(shù)據(jù)的3種方式,需要的朋友可以參考下
    2014-05-05
  • JavaScript cookie的設(shè)置獲取刪除詳解

    JavaScript cookie的設(shè)置獲取刪除詳解

    這篇文章主要介紹了JavaScript cookie的設(shè)置獲取刪除等等,,需要的朋友可以參考下
    2014-02-02
  • 用正則獲取指定路徑文件的名稱

    用正則獲取指定路徑文件的名稱

    用正則獲取指定路徑文件的名稱...
    2007-02-02
  • JS 加入收藏夾的代碼(主流瀏覽器通用)

    JS 加入收藏夾的代碼(主流瀏覽器通用)

    所有瀏覽器通用的js添加收藏夾代碼,本文整理了多種方法實(shí)現(xiàn)加入收藏夾功能,下面為大家詳細(xì)介紹下實(shí)現(xiàn)代碼,感興趣的朋友可以參考下哈
    2013-05-05
  • JavaScript中Number.isNaN 和 isNaN 的區(qū)別詳解

    JavaScript中Number.isNaN 和 isNaN 的區(qū)別詳解

    本文和大家分享一個(gè)前幾天寫代碼踩的坑,筆者在業(yè)務(wù)邏輯中需要對(duì)一個(gè)值進(jìn)行NaN的判斷,由于筆者的不嚴(yán)謹(jǐn),使用了isNaN,從而引起B(yǎng)ug,也正是因?yàn)檫@個(gè),筆者才知道了isNaN和Number.isNaN的區(qū)別,所以本文就和大家聊聊它們的區(qū)別
    2023-09-09
  • js includes方法的使用小結(jié)

    js includes方法的使用小結(jié)

    JavaScript中的數(shù)組includes()方法用于判斷數(shù)組中是否包含指定的元素,并返回一個(gè)布爾值,這篇文章主要介紹了js includes方法的使用,需要的朋友可以參考下
    2024-01-01
  • JS 組件系列之 bootstrap treegrid 組件封裝過程

    JS 組件系列之 bootstrap treegrid 組件封裝過程

    最近產(chǎn)品需要設(shè)計(jì)一套相對(duì)完整的組織架構(gòu)的解決方案,由于組織架構(gòu)涉及到層級(jí)關(guān)系,在表格里面展示層級(jí)關(guān)系,自然就要用到所謂的treegrid。下面小編通過本文給大家分享JS 組件系列之 bootstrap treegrid 組件的封裝過程,需要的朋友可以參考下
    2017-04-04
  • JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    在我們做業(yè)務(wù)開發(fā)的漫長歲月里,會(huì)多次跟時(shí)間打交道,相信大多數(shù)小伙伴對(duì)日期格式化也并不陌生,本文簡單記錄了JavaScript實(shí)現(xiàn)日期格式化的過程,以及一些拓展,希望對(duì)大家有所幫助
    2023-05-05

最新評(píng)論

三亚市| 新竹市| 鄄城县| 绥棱县| 南投市| 南平市| 哈密市| 枣庄市| 尼玛县| 开原市| 乐昌市| 思南县| 攀枝花市| 黔西| 余庆县| 铜川市| 亚东县| 台湾省| 揭阳市| 大宁县| 抚顺县| 呼伦贝尔市| 江城| 交城县| 襄汾县| 浮山县| 车险| 海淀区| 鸡泽县| 灵台县| 翼城县| 山丹县| 确山县| 广安市| 嘉禾县| 宕昌县| 涡阳县| 北京市| 长泰县| 临桂县| 若羌县|