webpack 全局變量引入——第三方模塊

有時候我們的項目需要用到第三方模塊饿敲,最常見的就是引入 jQuery 進行一些 DOM 操作冈爹。而第三方的模塊引入也有不同的方式涌攻。

第一步安裝依賴:

npm install --save jquery

接下來一起看看它jquery的引用方式和他們之間的區(qū)別。

1. 組件內(nèi)部引用
import $ from "jquery";

例如在 React 環(huán)境的 App 組件犯助。

import React, { Component } from "react";
import $ from "jquery";
export default class App extends Component {
    constructor(){
        super()
    }
    render() {
        console.log($);
        console.log(window.$);
        return (
            <div>
                <h1>建設社會主義中國</h1>
            </div>
        )
    }
}

上面的輸出結果:第一個能正常輸出 jQuery 函數(shù)癣漆。第二個輸出 undefined。為什么呢剂买?

答:$ 屬于第三方模塊惠爽,引入的時候因為閉包的影響不能暴露給全局,所以全局 windows上沒有 $ 這個函數(shù)瞬哼。

很明顯這種引入方式我們只能在組件里面使用婚肆,但是我們在寫代碼的時候不可能只在這一處用到。所以這種方式并不是太好用坐慰。

2. expose-loader 全局引入

既然我們想把 jQuery 暴露給全局较性,那就來實現(xiàn):

先安裝依賴,借用 expose-loader 來實現(xiàn)结胀。

npm install -S expose-loader

expose 使用有兩種方法赞咙。

  • 方法一:
    (App)組件內(nèi)部直接暴露:
import $ from "expose-loader?$!jquery";
  • 方法二
    在 webpack.config.js 里面進行配置:
module: {
  loaders: [
    { test: require.resolve("jquery"), loader: "expose-loader?$" }
  ]
}

這時候在像一一樣在組件內(nèi)部引入,就會發(fā)現(xiàn):

import React, { Component } from "react";
import $ from "jquery";
export default class App extends Component {
    constructor(){
        super()
    }
    render() {
        console.log($);
        console.log(window.$);
        return (
            <div>
                <h1>建設社會主義中國</h1>
            </div>
        )
    }
}

windows.$已經(jīng)輸出結果和$相同糟港。說明 $ 已經(jīng)暴露給全局了攀操。

三、引入webpack 插件

你沒看錯秸抚,這個插件的就是從 webpack 上面引出來的速和。providerPlugin 就是提供全局變量歹垫。注意這個東西只是在每個模塊注入全局變量而已。

使用配置 webpack.config.js :

const webpack = require("webpack");
plugins: [
    new webpack.ProvidePlugin({
        $     : 'jquery',
        jQuery: 'jquery'
    })
]

這時候我們來看 App 組件輸出情況:注意這個沒有import $ from "jquery"颠放。

import React, { Component } from "react";

export default class App extends Component {
    constructor(){
        super()
    }
    render() {
        console.log($);
        console.log(jQuery);
        console.log(window.$);
        return (
            <div>
                <h1>建設社會主義中國</h1>
            </div>
        )
    }
}

輸出結果是: $ === jQuery排惨,windows.$ === undefined,結果很明顯碰凶,我們組件內(nèi)部并沒有引入 jQuery 包暮芭,但是依然能夠打印出 jQuery 函數(shù),說明 providerPlugin 確實為每個模塊注入了 jQuery痒留。但是注入的jQuery并不是全局的谴麦,所以 windows.$ 或 windows.jQuery 是 undefined。

四伸头、首頁引入

最后我們來一個最原始的方法匾效。首頁 index.html 里面通過 script 標簽引入 jQuery CDN 在線加速包。

<script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>

index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>沖突時恤磷,以我template為準</title>
</head>
<body>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>
    <!-- 注意jQuery的在 div.id 之前引入 -->
    <div id = "app"></div>
</body>
</html>

毫無疑問面哼,jQuery被暴露給全局了,在組件的任何地方我們都能訪問到 jQuery扫步。

但是要注意的是魔策,在全局引入 jQuery 的話,組件內(nèi)部直接使用就完了河胎,就沒必要在去:

import $ from "jquery";

如果你再 import 的話闯袒,jQuery 會被打包,這會導致打包文件過大的效果游岳,但是如果你非要這樣的話政敢,可以設置 一下 webpack.config.js 。

module.exports = {
    externals: {
        jquery: '$'
    }
}

這樣就不會重復打包 jQuery 了胚迫。

eternals :用來告訴 webpack要構建的代碼使用了哪些不用被打包的模塊喷户,這些模塊就是外部環(huán)境提供的,打包時忽略掉他們访锻。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褪尝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子期犬,更是在濱河造成了極大的恐慌河哑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龟虎,死亡現(xiàn)場離奇詭異璃谨,居然都是意外死亡,警方通過查閱死者的電腦和手機遣总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門睬罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旭斥,你說我怎么就攤上這事容达。” “怎么了垂券?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵花盐,是天一觀的道長。 經(jīng)常有香客問我菇爪,道長算芯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任凳宙,我火速辦了婚禮熙揍,結果婚禮上,老公的妹妹穿的比我還像新娘氏涩。我一直安慰自己届囚,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布是尖。 她就那樣靜靜地躺著意系,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饺汹。 梳的紋絲不亂的頭發(fā)上蛔添,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音兜辞,去河邊找鬼迎瞧。 笑死,一個胖子當著我的面吹牛弦疮,可吹牛的內(nèi)容都是我干的夹攒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼胁塞,長吁一口氣:“原來是場噩夢啊……” “哼咏尝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啸罢,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤编检,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扰才,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體允懂,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年衩匣,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕾总。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥航。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖生百,靈堂內(nèi)的尸體忽然破棺而出递雀,到底是詐尸還是另有隱情,我是刑警寧澤蚀浆,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布缀程,位于F島的核電站,受9級特大地震影響市俊,放射性物質(zhì)發(fā)生泄漏杨凑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一摆昧、第九天 我趴在偏房一處隱蔽的房頂上張望撩满。 院中可真熱鬧,春花似錦据忘、人聲如沸鹦牛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曼追。三九已至,卻和暖如春汉规,著一層夾襖步出監(jiān)牢的瞬間礼殊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工针史, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晶伦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓啄枕,卻偏偏與公主長得像婚陪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子频祝,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容