成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開(kāi)始的webpack生活-0x009:FilesLoader裝載文件

NervosNetwork / 989人閱讀

摘要:修改配置文件匹配的文件名,這里匹配后綴為的,只要了該文件名結(jié)尾的文件,都將使用這個(gè)來(lái)處理命中后使用的加載器查看結(jié)果,和之前一致,推薦使用配置文件形式,可以保持引入文件格式的一致性。有利于維護(hù)和美觀更多配置,可以查閱關(guān)于部分。

0x001 概述

上一章講的是DLL加速編譯,這一章開(kāi)始講loader相關(guān)的部分,但是關(guān)于plugin的部分善未完結(jié),因?yàn)榧磳⒁v的ExtractTextWebpackPlugin用到了一些loader,所以覺(jué)得先講一下loder比較好。

0x002 loader介紹

我比較喜歡裝載器這個(gè)翻譯,loder說(shuō)白了就是對(duì)各種文件的轉(zhuǎn)化而已,比如json-loader可以將loader文件中的內(nèi)容轉(zhuǎn)化為js對(duì)象,也就是可以模擬為讀取json文件然后做JSAON.parse而已,而對(duì)于其他的裝載器則也類似,是對(duì)不同文件的不同處理方式,只是他們保持了相同的接口形式。就像一個(gè)加工的機(jī)器,有一個(gè)入口和一個(gè)出口,入口放豬肉,出來(lái)豬肉制品,入口放雞肉,出來(lái)雞肉制品,里面如何實(shí)現(xiàn)或許不一樣,但是操作方式基本一致。

0x003 栗子1-raw-loader:讀取文件,并封裝成模塊,導(dǎo)出唯一的內(nèi)容為文件內(nèi)容的字符串

初始化項(xiàng)目

$ 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)

打包并查看結(jié)果

$ 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"

/***/ })
/******/ ]);

可以看到,文件的內(nèi)容被以一個(gè)模塊的形式導(dǎo)出,而在引入的文件中,變得不再是引入一個(gè)文件,而是一個(gè)模塊。

不在require中使用loader,因?yàn)槁闊┣也幻烙^,我們可以把它遷移到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了該文件名結(jié)尾的文件,都將使用這個(gè)raw-loader來(lái)處理

use:命中后使用的加載器

查看結(jié)果,和之前一致,推薦使用wenpack配置文件形式,可以保持引入文件格式的一致性。有利于維護(hù)和美觀

更多配置,可以查閱webpack關(guān)于raw-loader部分。

0x004 栗子2-json-loader:將json文件轉(zhuǎn)化成js對(duì)象

安裝依賴

$ 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")

打包并查看結(jié)果

/* 1 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(2)

/***/ }),
/* 2 */
/***/ (function(module, exports) {

module.exports = {"name":"張三","age":"21"}

/***/ })
/******/ ]);

可見(jiàn),json-loder將文件內(nèi)的json字符串轉(zhuǎn)化成了js對(duì)象,相當(dāng)于使用raw-loader獲取文件內(nèi)容字符串,再調(diào)用JSON.parse,然后封裝成模塊并導(dǎo)出。

0x005 栗子3-file-loader:導(dǎo)出文件并返回文件的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")

打包并查看結(jié)果

$ 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";

/***/ })
/******/ ]);

可以看出,文件被導(dǎo)出到了dist,并且將文件的路徑封裝成了模塊并導(dǎo)出。

option其他配置

name:名字

[path]:文件路徑

[name]:文件名稱

[hash]:文件hash

[ext]:文件后綴

以上變量可以隨機(jī)組合,形成文件名,推薦:[name].[hash].[ext]

注意:每引入一個(gè)文件,就會(huì)生成一個(gè)模塊,即便該文件只是文件名不同,但是內(nèi)容相同

更多配置,可以查閱webpack關(guān)于file-loader部分。

0x006 栗子4-url-loader:根據(jù)文件大小類型判斷是否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")

打包并查看結(jié)果

// ./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的那個(gè)圖片文件被以文件的形式導(dǎo)出,而小于1m的文件被以dataurl的形式封裝成模塊

參數(shù)說(shuō)明

limit:限制文件大小,如果小于這個(gè)數(shù),則轉(zhuǎn)化成DATAURL,如果大于這個(gè)數(shù),則使用fallback指定的loader再次裝載,如果沒(méi)有配置fallback,則默認(rèn)調(diào)用file-loader

mimetype:這個(gè)只是用來(lái)指定文件的mimetype,因?yàn)橛行┪募](méi)有后綴,或者后綴和文件不符合。

fallback:文件超出limit之后的加載器

注意url-loader自身只有這3個(gè)參數(shù),但是如果超出limit大小,將會(huì)執(zhí)行下一個(gè)loader并且自動(dòng)將配置的參數(shù)往下傳,所以文中的案例的name其實(shí)是file-loader的參數(shù),其他loader的參數(shù)同理也可以往下傳

注意:這里的use其實(shí)還有另外一種querystring寫(xiě)法,不過(guò)不推薦

{
        test: /.(png|jpg|gif)$/,
        use:"url-loader?limit=1045876&name=[name].[hash].[ext]"
    }

更多配置,可以查閱webpack關(guān)于url-loader部分。

0x007. 資源

源代碼

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89623.html

相關(guān)文章

  • 從零開(kāi)始webpack生活-0x001:webpack初次相逢

    摘要:同時(shí)不能直接單純的指定輸出的文件名稱,比如,將會(huì)報(bào)錯(cuò),可以換成以下方式指定,或者其他類似方式。如果打包過(guò)程出現(xiàn)錯(cuò)誤,比如語(yǔ)法錯(cuò)誤,將會(huì)在控制臺(tái)以紅色文字顯示,并且在你修復(fù)之后會(huì)再次打包。 0x001 概述 其實(shí)我不知道怎么寫(xiě),所以決定就一塊一塊的寫(xiě)點(diǎn)平常配置的過(guò)程,根據(jù)不同東西稍微分區(qū)一下就好了 0x002 初始化項(xiàng)目結(jié)構(gòu) $ mkdir webpack_study $ cd webp...

    Turbo 評(píng)論0 收藏0
  • 從零開(kāi)始webpack生活-0x011:StylingLoader裝載樣式

    0x001 概述 上一章講的是裝載模板,這一章講的是裝載樣式 0x002 配置環(huán)境 $ 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...

    mylxsw 評(píng)論0 收藏0
  • 從零開(kāi)始webpack生活-0x012:TranspilingLoader裝載腳本

    摘要:概述上一章講的是樣式裝載相關(guān)的,這一章見(jiàn)得是腳本加載相關(guān)的環(huán)境配置栗子加載安裝依賴修改配置添加配置文件使用編寫(xiě)腳本打包并查看結(jié)果可以看到,語(yǔ)法被自動(dòng)轉(zhuǎn)化成了更多配置請(qǐng)查閱關(guān)于章節(jié)栗子加載安裝依賴 0x001 概述 上一章講的是樣式裝載相關(guān)的loader,這一章見(jiàn)得是腳本加載相關(guān)的loader 0x002 環(huán)境配置 $ mkdir 0x012-transliling-loader $ c...

    Tonny 評(píng)論0 收藏0
  • 從零開(kāi)始webpack生活-0x010:TemplatingLoader裝載模板

    摘要:概述上一章講的時(shí)候關(guān)于文件相關(guān)的,這一章講的是模板相關(guān)的。環(huán)境配置栗子加載安裝依賴包編寫(xiě)并引入配置低于否則使用打包并查看結(jié)果可以看到,被打包成了字符串,并封裝成模塊導(dǎo)出。更多資源,請(qǐng)查閱的倉(cāng)庫(kù)和官網(wǎng)資源源代碼 0x001 概述 上一章講的時(shí)候關(guān)于文件相關(guān)的loder,這一章講的是模板相關(guān)的loder。 0x002 環(huán)境配置 $ mkdir 0x010-templating-loader...

    jk_v1 評(píng)論0 收藏0
  • 從零開(kāi)始webpack生活-0x013:LintingLoader格式校驗(yàn)

    摘要:概述上一章講的是腳本裝載相關(guān)的,這一章見(jiàn)得是腳本格式校驗(yàn)相關(guān)的環(huán)境配置使用校驗(yàn)格式這份配置是偷的安裝依賴包修改配置文件添加配置文件編寫(xiě)測(cè)試代碼張三打包輸出張三 0x001 概述 上一章講的是腳本裝載相關(guān)的loader,這一章見(jiàn)得是腳本格式校驗(yàn)相關(guān)的loader 0x002 環(huán)境配置 $ mkdir 0x013-linting-loader $ cd 0x013-linting-load...

    ephererid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<