国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[譯]Webpack的奇妙世界

enali / 2222人閱讀

摘要:相反,解釋背后的原理是什么使他比一個(gè)構(gòu)造器更加強(qiáng)大。仍然是構(gòu)造器類似這樣的工具存在的主要原因之一就是解決依賴問題。是一個(gè)模塊構(gòu)造器,就是前文所說的。

Webpack是一個(gè)JavaScript模塊構(gòu)造器。 這是適合它功能的名稱。 但是,我想在本文中展現(xiàn)Webpack的真正功能。

本文將不講解如何使用Webpack。 相反,解釋背后的原理:是什么使他比一個(gè)構(gòu)造器更加強(qiáng)大。

Webpack仍然是構(gòu)造器

類似webpack這樣的工具存在的主要原因之一就是解決依賴問題。 JavaScript中的模塊引起的依賴問題; 特別是Node.js.

Node.js允許您模塊化代碼。 代碼的模塊化導(dǎo)致依賴關(guān)系的問題。 可能會發(fā)生循環(huán)依賴,例如,A - > B - > A引用。 Webpack怎么解決這個(gè)問題呢?它使用了工具來構(gòu)建所有引用模塊的完整依賴圖。 使用此圖表,可以進(jìn)行分析,以幫助您緩解這種依賴圖的壓力。

Webpack允許你的代碼中有多個(gè)入口,并將一個(gè)將依賴關(guān)系圖捆綁到一個(gè)或多個(gè)輸出的文件。

Webpack遠(yuǎn)不止這些

對我而言,使webpack如此特別的是它提供的很大的擴(kuò)展點(diǎn)。

Loaders

Loaders是我喜歡稱之為迷你透明機(jī)。 他們載入任何類型的文件 - 例如TypeScript,CoffeeScript,JSON等 - 并產(chǎn)生JavaScript代碼,以便以后添加到Webpack正在構(gòu)建的依賴關(guān)系圖中。

Loaders的強(qiáng)大之處在于它們數(shù)量很多。 Loaders是一個(gè)擴(kuò)展點(diǎn)。 您可以創(chuàng)建自己的加載程序,并且有100個(gè)或者更多的第三方加載程序。

例如,有沒有一個(gè)Loaders使我們可以采用像C#這樣的靜態(tài)類型語言,并將其轉(zhuǎn)化為JavaScript?

這就對Loaders有了一些限制。Loaders可以根據(jù)文件類型等進(jìn)行鏈接,配置,過濾。

Custom Loader Example

如webpack文檔所解釋的,Loader只是一個(gè)導(dǎo)出功能的節(jié)點(diǎn)模塊。 一個(gè)loader與一個(gè)導(dǎo)出函數(shù)的nodejs模塊一樣簡單:

   module.exports = function(src) {
        return src + "
"
            + "window.onload = function() { 
"
            + " console.log("This is from the loader!"); 
"
            + "}";
    };

這是一個(gè)Lodader的簡單例子。 這個(gè)Lodader正在做的是在當(dāng)前瀏覽器會話的窗口加載上附加一個(gè)函數(shù)來寫入控制臺。

根據(jù)這個(gè)想法,我們可以采取任何來源的輸入,并且可以插入任何我們需要的輸入。 所以回到我們前面的例子,我們可以用C#作為輸入,并創(chuàng)建一個(gè)解析器,將它轉(zhuǎn)化為Webpack希望的本地JavaScript。

一個(gè)C#到JavaScript的轉(zhuǎn)換器是有點(diǎn)牽強(qiáng),實(shí)在點(diǎn)就是根本毫無意義,但我希望讀者能從中體會到webpack比一個(gè)普通構(gòu)造器強(qiáng)大的地方

Plugins

插件允許webpack擴(kuò)展性比通過文件傳文件方式的Loader更強(qiáng)。插件允許你向webpack核心插入更多的功能,例如您可以添加一個(gè)用于縮小的插件; 從輸出中提取某些文本,如CSS; 使用插件進(jìn)行壓縮,等等。

插件可以通過訪問Webpack編譯器來工作。 他們可以訪問可能發(fā)生并可能發(fā)生的所有編譯步驟,并可以修改這些步驟。 這意味著一個(gè)插件可以修改什么文件做為源文件,添加什么文件作為靜態(tài)資源,等等。

插件的一個(gè)小例子如下:

file: "./my-custom-plugin.js"

function MyCustomPlugin() {}

MyCustomPlugin.prototype.apply = function(compiler) {
    compiler.plugin("emit", displayCurrentDate);
    compiler.plugin("after-emit", displayCurrentDate)
}

function displayCurrentDate(compilation, callback) {
    console.log(Date());

    callback();
}

module.exports = MyCustomPlugin;

在這個(gè)例子中,我們將兩個(gè)事件處理程序添加到Webpack編譯器中的兩個(gè)多帶帶的事件鉤子中。 其結(jié)果是將在emit之前打印日期日志,emit之后打印日期日志

在Webpack配置文件中可以這樣子配置:

var MyCustomPlugin = require("my-custom-plugin");

var webpackConfig = {
    ...
    plugins: [
        new MyCustomPlugin()
    ]
}

插件將會在emit和after-emit的時(shí)候執(zhí)行,webpack的編輯鉤子函數(shù)列表在webpack官網(wǎng)可以找到

插件的重要性就是它也是一個(gè)擴(kuò)展點(diǎn)。 Webpack的設(shè)計(jì)方式是讓用戶完全擴(kuò)展Webpack的核心。 有很多插件可供選擇,很多是第三方。

考慮到這一點(diǎn),插件可以占用您需要的所有資源,并使用算法進(jìn)行壓縮。 事實(shí)上,已經(jīng)有一個(gè)插件為這件事情。

Summary

Webpack是一個(gè)模塊構(gòu)造器,就是前文所說的。 它需要您的依賴關(guān)系圖,并輸出瀏覽器可以讀的格式。

但是webpack能做的不止這些

如果我們可以采用C#代碼,并將其轉(zhuǎn)換成JavaScript? 如果我們可以使用YAML配置文件,并創(chuàng)建一個(gè)剛剛配置的工作程序怎么辦? 如果我們拍攝圖像,并自動將其裁剪和灰度,該怎么辦?

我認(rèn)為,如果您開始將Webpack視為一個(gè)轉(zhuǎn)換器,而不僅僅是加載器,則可以看到Webpack的真正實(shí)力。

感謝您的閱讀,希望這會有所幫助。

關(guān)注我的公眾號,更多優(yōu)質(zhì)文章定時(shí)推送

翻譯自 The Wonderful World of Webpack

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88547.html

相關(guān)文章

  • Webpack下莫名其妙出現(xiàn)jQuery與報(bào)錯(cuò),記一次奇妙Debug旅程

    摘要:在過程中,發(fā)現(xiàn)的報(bào)錯(cuò)是在中兩個(gè)頁面的無刷切換中出現(xiàn)的。看向網(wǎng)址等等網(wǎng)址的前綴是,這個(gè)是谷歌瀏覽器插件的前綴。難不成,這個(gè)文件是谷歌瀏覽器插件的于是看向了中間的那一串神秘字符串。 場景重現(xiàn) 項(xiàng)目是一個(gè)SPA,使用了Vue+Vue-Router+Webpack+jQuery。報(bào)錯(cuò)的場景如下:showImg(http://7xk109.com1.z0.glb.clouddn.com/blog...

    Scliang 評論0 收藏0
  • 從零開始webpack生活-0x005:DefinePlugin奇妙用處

    摘要:注意該插件是簡單的字符串替換,所以如果是定義常量最好使用包裹要替換的內(nèi)容,或者使用轉(zhuǎn)化,否則會變成代碼直接插入,比如版本號這樣替換的時(shí)候就會變成而不會變成導(dǎo)致錯(cuò)誤的數(shù)據(jù)格式。 0x001 概述 上一章講的是js壓縮混淆,和這一章沒有半毛錢關(guān)系,這章講的是DefinePlugin,一個(gè)好像沒有用,但其實(shí)很好用的一個(gè)插件,我很喜歡,嘿嘿嘿! 0x002 插件介紹 說白了,這是一個(gè)簡單的字符...

    The question 評論0 收藏0
  • 2017-06-16 前端日報(bào)

    摘要:前端日報(bào)精選漸進(jìn)式動畫解決方案從前端開發(fā)看面向未來的敏捷學(xué)習(xí)法知乎專欄深度剖析現(xiàn)代應(yīng)用眾成翻譯譯關(guān)于你需要知道的一切構(gòu)建離線優(yōu)先的應(yīng)用知乎專欄中文為何默認(rèn)開啟四進(jìn)程不犧牲內(nèi)存占用異步一淺出異步事件性能調(diào)優(yōu)之內(nèi)存篇二知乎專欄之性能 2017-06-16 前端日報(bào) 精選 漸進(jìn)式動畫解決方案從前端開發(fā)看面向未來的敏捷學(xué)習(xí)法 - 知乎專欄深度剖析現(xiàn)代 JavaScript 應(yīng)用 — SiteP...

    _ipo 評論0 收藏0
  • 】一個(gè)小時(shí)搭建一個(gè)全棧Web應(yīng)用框架(上)

    摘要:初始項(xiàng)目設(shè)置我們將使用包管理器來處理依賴項(xiàng)。使用包管理器可以使您的項(xiàng)目依賴項(xiàng)保持最新狀態(tài),并能夠獲取和安裝最新的包。是小型應(yīng)用的最佳選擇之一。 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:Creating a full-stack web application with Python, NPM, Webpack and React英文原文:https://codeburst.io/creating....

    wizChen 評論0 收藏0
  • 】一個(gè)小時(shí)搭建一個(gè)全棧Web應(yīng)用框架(上)

    摘要:初始項(xiàng)目設(shè)置我們將使用包管理器來處理依賴項(xiàng)。使用包管理器可以使您的項(xiàng)目依賴項(xiàng)保持最新狀態(tài),并能夠獲取和安裝最新的包。是小型應(yīng)用的最佳選擇之一。 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:Creating a full-stack web application with Python, NPM, Webpack and React英文原文:https://codeburst.io/creating....

    Doyle 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<