<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
webpack 只能直接處理 javascript 格式的程式碼。任何非 js 檔案都必須被預先處理轉換為 js 程式碼,才可以參與打包。loader(載入器)就是這樣一個程式碼轉換器。
它由 webpack 的 loader runner
執行呼叫,接收原始資源資料作為引數(當多個載入器聯合使用時,上一個loader的結果會傳入下一個loader),最終輸出 javascript 程式碼(和可選的 source map)給 webpack 做進一步編譯。
1). loader型別
pre: 前置loader normal: 普通loader inline: 內聯loader post: 後置loader
2). 執行優先順序
4類 loader 的執行優級為:pre > normal > inline > post
。 相同優先順序的 loader 執行順序為:從右到左,從下到上
。 3. 字首的作用
內聯 loader 可以通過新增不同字首,跳過其他型別 loader。
!
跳過 normal loader。 -!
跳過 pre 和 normal loader。 !!
跳過 pre、 normal 和 post loader。 這些字首在很多場景下非常有用。
loader 是一個匯出一個函數的 node 模組。
1). 最簡單的 loader
當只有一個 loader 應用於資原始檔時,它接收原始碼作為引數,輸出轉換後的 js 程式碼。
// loaders/simple-loader.js module.exports = function loader (source) { console.log('simple-loader is working'); return source; } 揭祕webpack loader - 知乎
style-loader 最終需返回一個 js
指令碼:在指令碼中建立一個 style
標籤,將 css
程式碼賦給 style
標籤,再將這個 style
標籤插入 html
的 head
中。
plugin的範圍更大,作用也更強。
可以自動打包生成html檔案,並自動引入打包後的結果 打包前清除原dist檔案中的內容 可以將我們需要的但是並沒有引入靜態資源一同打包到dist檔案中 對打包的結果進行特殊的處理 壓縮打包後的內容,對打包結果可以進行更細的自定義操作
1)在造輪子之前我們必須要知道它的原理,plugin相比loader還有一點很大的不同,loader只工作於模組的載入環節,而plugin即可可以作用於打包過程的每一個環節,有點像vue中的生命週期,我們可以在一個合適的週期進行相應的操作。webpack的外掛機制就是我們常說的勾點機制,整個打包過程可以分為多個環節,為了便於外掛的擴充套件,webpack機會在每個環節都提供了一個勾點,我們就可以利用這些勾點來造輪子。
2)webpack為我們提供了哪些hooks呢?
entry-option 初始化 option run 開始編譯 compile 真正開始的編譯,在建立 compilation 物件之前 compilation 生成好了 compilation 物件 make 從 entry 開始遞迴分析依賴,準備對每個模組進行 build after-compile 編譯 build 過程結束 emit 在將記憶體中 assets 內容寫到磁碟資料夾之前 after-emit 在將記憶體中 assets 內容寫到磁碟資料夾之後 done 完成所有的編譯過程 failed 編譯失敗的時候 …
3)webpack要求我們的外掛必須是一個函數,或者是一個包含apply的物件。一般來說我們都會定義一個型別,然後在這個型別中定義apply方法,最後再通過這個型別來建立一個範例物件去使用這個外掛。
const pluginName = 'myplugin' module.exports = class myplugin { apply(){} }
這個apply方法接收一個叫compiler的引數物件,這個物件是webpack工作中最核心的物件,包含了此次打包構建的所有設定資訊,我們就可以通過這個物件去註冊勾點函數。
const pluginName = 'myplugin' module.exports = class myplugin { apply(compiler){ compiler.hooks.run.tap(pluginName, () =>{ { console.log('開始編譯'); } }) } }
我們想在run階段輸出‘開始編譯’這句話,在webpack.config.js中引入並設定
const myplugin = require('./myplugin') plugins:[ new myplugin() ]
style-loader :在html檔案中建立標籤,將js中的樣式插入
css-loader:將css檔案變成commonjs模組載入到js中,輸出為樣式字串
less-loader:將less轉換為css
url-loader+內建file-loader:處理圖片資源(不能處理html中的圖片)
html-loader:處理html中的圖片,負責引入img從而能被url-loader處理
{ test: /.(jpg|png|gif)$/, use: { loader: 'url-loader', options:{ limit:5*1024, esModule: false, name:[hash:10].[ext] //給圖片檔案重新命名,取雜湊值前10位加上原來的擴充套件名 } }, type:'javascript/auto' //在webpack4的基礎上加上這句話 }, { test: /.(htm|html)$/, loader: 'html-loader', }
file-loader:打包其他資源,如字型圖示,不需要優化壓縮
(webpack5之後,我們可以直接使用資源模組型別(asset module type),來替代上面的這些loader)
html-webpack-plugin:在build中新建一個index.html檔案,自動引入打包輸出的所有資源(js/css).可以設定 template為新html檔案建立模板
ignore-plugin:用來忽略一些檔案
mini-css-extract-plugin:將css單獨打包成一個檔案的css
clean-webpack-plugin:用於清除目錄檔案,在生產環境中編譯檔案的時候,用它來講dist的目錄清除乾淨,然後再生成新的
serviceworker-webpack-plugin:離線快取功能
webpack-parallel-uglify-plugin:多執行緒壓縮js程式碼,加快構建速度
以上就是一文詳解webpack中loader與plugin的區別的詳細內容,更多關於webpack中loader plugin區別的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45