摘要:修改配置文件匹配的文件名,這里匹配后綴為的,只要了該文件名結尾的文件,都將使用這個來處理命中后使用的加載器查看結果,和之前一致,推薦使用配置文件形式,可以保持引入文件格式的一致性。有利于維護和美觀更多配置,可以查閱關于部分。
0x001 概述
上一章講的是DLL加速編譯,這一章開始講loader相關的部分,但是關于plugin的部分善未完結,因為即將要講的ExtractTextWebpackPlugin用到了一些loader,所以覺得先講一下loder比較好。
0x002 loader介紹我比較喜歡裝載器這個翻譯,loder說白了就是對各種文件的轉化而已,比如json-loader可以將loader文件中的內容轉化為js對象,也就是可以模擬為讀取json文件然后做JSAON.parse而已,而對于其他的裝載器則也類似,是對不同文件的不同處理方式,只是他們保持了相同的接口形式。就像一個加工的機器,有一個入口和一個出口,入口放豬肉,出來豬肉制品,入口放雞肉,出來雞肉制品,里面如何實現或許不一樣,但是操作方式基本一致。
0x003 栗子1-raw-loader:讀取文件,并封裝成模塊,導出唯一的內容為文件內容的字符串
初始化項目
$ mkdir 0x009-loader $ cd 0x009-loader $ npm init -y $ cnpm install --save-dev webpack raw-loader
添加配置
const path = require("path"); module.exports = { entry : { "index": ["./src/index.js"], }, output : { path : path.join(__dirname, "dist"), filename: "[name].bundle.js" } };
添加示例文件
// ./srcindex.txt hello loader // ./src/index.j var content = require("raw-loader!./index.txt") console.log(content)
打包并查看結果
$ webpack // ./dist/index.js /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2) console.log(content) /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = "hello loader" /***/ }) /******/ ]);
可以看到,文件的內容被以一個模塊的形式導出,而在引入的文件中,變得不再是引入一個文件,而是一個模塊。
不在require中使用loader,因為麻煩且不美觀,我們可以把它遷移到webpack.conf.js中。
修改配置文件
// ./wenpack.conf.js const path = require("path"); module.exports = { entry : { "index": ["./src/index.js"], }, output: { path : path.join(__dirname, "dist"), filename: "[name].bundle.js" }, module: { rules: [ { test: /.txt$/, use : "raw-loader" } ] } };
test:匹配的文件名,這里匹配后綴為.txt的,只要require了該文件名結尾的文件,都將使用這個raw-loader來處理
use:命中后使用的加載器
查看結果,和之前一致,推薦使用wenpack配置文件形式,可以保持引入文件格式的一致性。有利于維護和美觀
更多配置,可以查閱webpack關于raw-loader部分。
0x004 栗子2-json-loader:將json文件轉化成js對象安裝依賴
$ cnpm install --save-dev json-loader
添加rule配置
{ test: /.json$/, use : loader : "json-loader" }
引用
//./src/index.json { "name": "張三", "age": "21" } // ./src/index.js require("./index.json")
打包并查看結果
/* 1 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(2) /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = {"name":"張三","age":"21"} /***/ }) /******/ ]);
可見,json-loder將文件內的json字符串轉化成了js對象,相當于使用raw-loader獲取文件內容字符串,再調用JSON.parse,然后封裝成模塊并導出。
0x005 栗子3-file-loader:導出文件并返回文件的URL安裝依賴包
$ cnpm install --save-dev file-loader
添加rule配置
{ test: /.(png|jpg|gif)$/, use : [ { loader : "file-loader", options: {} } ] }
引用
// ./src/index.js var funny = require("./../res/funny.png")
打包并查看結果
$ ls ./dist 4e4e36593ce458606ffd851043749eec.png index.bundle.js
/* 1 */ /***/ (function(module, exports, __webpack_require__) { // var content = require("raw-loader!./index.txt") // var content = require("./index.txt") var funny = __webpack_require__(2) /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "4e4e36593ce458606ffd851043749eec.png"; /***/ }) /******/ ]);
可以看出,文件被導出到了dist,并且將文件的路徑封裝成了模塊并導出。
option其他配置
name:名字
[path]:文件路徑
[name]:文件名稱
[hash]:文件hash
[ext]:文件后綴
以上變量可以隨機組合,形成文件名,推薦:[name].[hash].[ext]
注意:每引入一個文件,就會生成一個模塊,即便該文件只是文件名不同,但是內容相同
更多配置,可以查閱webpack關于file-loader部分。
0x006 栗子4-url-loader:根據文件大小類型判斷是否DATAURL刪除file-loader,添加配置
{
test: /.(png|jpg|gif)$/, use : [ { loader : "url-loader", options: { limit : 1048576, // 低于1m, 這里的單位是Byte mimetype: "image/jpg", // 類型是`jpg` name : "[name].[hash].[ext]", fallback: "file-loader" //否則使用`file-loader` } } ] } ```
引入一張高于1048576的jpg圖片和1張低于81920的jpg圖片,還有一張png圖片,da
// 低于1048576 require("./../res/icon.jpg") // 高于1048576 require("./../res/big.jpg")
打包并查看結果
// ./dist big.f22f26599897a8f5003aea3d070135bf.jpg index.bundle.js
// ./index.bundle.js /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAcFBQYFBAcGBgYIBwcICx... tDEx6snNS15Z9DcRe9a1n/AMew+tZI/qK1rP8A49h9a1p7Es//2Q==" /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "big.f22f26599897a8f5003aea3d070135bf.jpg"; /***/ }) /******/ ]);
可以看出大于1m的那個圖片文件被以文件的形式導出,而小于1m的文件被以dataurl的形式封裝成模塊
參數說明
limit:限制文件大小,如果小于這個數,則轉化成DATAURL,如果大于這個數,則使用fallback指定的loader再次裝載,如果沒有配置fallback,則默認調用file-loader
mimetype:這個只是用來指定文件的mimetype,因為有些文件沒有后綴,或者后綴和文件不符合。
fallback:文件超出limit之后的加載器
注意:url-loader自身只有這3個參數,但是如果超出limit大小,將會執行下一個loader并且自動將配置的參數往下傳,所以文中的案例的name其實是file-loader的參數,其他loader的參數同理也可以往下傳
注意:這里的use其實還有另外一種querystring寫法,不過不推薦
{ test: /.(png|jpg|gif)$/, use:"url-loader?limit=1045876&name=[name].[hash].[ext]" }
更多配置,可以查閱webpack關于url-loader部分。
0x007. 資源源代碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89623.html
摘要:同時不能直接單純的指定輸出的文件名稱,比如,將會報錯,可以換成以下方式指定,或者其他類似方式。如果打包過程出現錯誤,比如語法錯誤,將會在控制臺以紅色文字顯示,并且在你修復之后會再次打包。 0x001 概述 其實我不知道怎么寫,所以決定就一塊一塊的寫點平常配置的過程,根據不同東西稍微分區一下就好了 0x002 初始化項目結構 $ mkdir webpack_study $ cd webp...
0x001 概述 上一章講的是裝載模板,這一章講的是裝載樣式 0x002 配置環境 $ mkdir 0x011-styling-loader $ cd 0x011-styling-loader $ npm init -y $ npm install --save-dev webpack $ touch ./src/index.js $ vim webpack.config.js // ./web...
摘要:概述上一章講的是樣式裝載相關的,這一章見得是腳本加載相關的環境配置栗子加載安裝依賴修改配置添加配置文件使用編寫腳本打包并查看結果可以看到,語法被自動轉化成了更多配置請查閱關于章節栗子加載安裝依賴 0x001 概述 上一章講的是樣式裝載相關的loader,這一章見得是腳本加載相關的loader 0x002 環境配置 $ mkdir 0x012-transliling-loader $ c...
摘要:概述上一章講的時候關于文件相關的,這一章講的是模板相關的。環境配置栗子加載安裝依賴包編寫并引入配置低于否則使用打包并查看結果可以看到,被打包成了字符串,并封裝成模塊導出。更多資源,請查閱的倉庫和官網資源源代碼 0x001 概述 上一章講的時候關于文件相關的loder,這一章講的是模板相關的loder。 0x002 環境配置 $ mkdir 0x010-templating-loader...
摘要:概述上一章講的是腳本裝載相關的,這一章見得是腳本格式校驗相關的環境配置使用校驗格式這份配置是偷的安裝依賴包修改配置文件添加配置文件編寫測試代碼張三打包輸出張三 0x001 概述 上一章講的是腳本裝載相關的loader,這一章見得是腳本格式校驗相關的loader 0x002 環境配置 $ mkdir 0x013-linting-loader $ cd 0x013-linting-load...
閱讀 468·2021-10-09 09:57
閱讀 473·2019-08-29 18:39
閱讀 814·2019-08-29 12:27
閱讀 3030·2019-08-26 11:38
閱讀 2671·2019-08-26 11:37
閱讀 1296·2019-08-26 10:59
閱讀 1383·2019-08-26 10:58
閱讀 993·2019-08-26 10:48