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

資訊專(zhuān)欄INFORMATION COLUMN

webpack&&loader

yuanzhanghu / 964人閱讀

摘要:本質(zhì)上是一個(gè)可以模塊化使用的加載處理的函數(shù)。本文著重討論以作為樣本分析。下面一幅圖分別是單和雙編譯結(jié)果圖。總結(jié)通過(guò)簡(jiǎn)單的例子復(fù)習(xí)了編譯后的文件執(zhí)行流程探索了編譯流程研究意義還是有的。相關(guān)問(wèn)題參考鏈接參考鏈接

引言

在回答一個(gè)問(wèn)題時(shí),引發(fā)一些疑問(wèn),分析總結(jié)下,作為備忘

webpack

webpack對(duì)于我來(lái)說(shuō),應(yīng)用場(chǎng)景主要是,編譯打包我通過(guò)模塊化組織書(shū)寫(xiě)的文件,用其提供的各種loader可以讓我在js中模塊化的加載、管理各種格式resource,以及其附屬生態(tài)圈各種plugin進(jìn)行功能拓展(例如常用的CommonsChunkPlugin、UglifyjsWebpackPlugin等等), webpack-dev-server做熱加載等等。
具體一些使用配置介紹,可以參考我之前一篇相關(guān)文章

webpack 加載方式

首先webpack build后的文件中代碼,通過(guò)靈活的配置可以被打包成各種標(biāo)準(zhǔn)格式的代碼(AMD,CMD等等),
在js中表面上可以通過(guò)形如import x form xx、require("x")、require.ensure()等方式引入各種資源,本質(zhì)上是先通過(guò)resolve解析,然后loader加載,類(lèi)似管道的效果進(jìn)行各種預(yù)先設(shè)置好的加工處理。

loader

A webpack loader is a Node module that tells webpack how to take some input content and transform it into output JavaScript.

loader本質(zhì)上是一個(gè)可以模塊化使用的加載處理resource的函數(shù)。本文著重討論,以raw loader作為樣本分析。

raw loader

Loads raw content of a file (as utf-8).

配置

 entry:{
        "case7":__dirname+"/index.js",
    },
    output:{
        path: __dirname+"/dist",
        filename:"[name].js",
    },
    module: {
        rules: [
            {
                test: /.css$/,
                use: "raw-loader"
            }
        ]
    }

index.js

import str from "./file.css";
console.log(str);

執(zhí)行webpack后,運(yùn)行case7.js,輸出如下

body{
    background: black;
}

更改配置

原配置中添加
{
    test: /.css$/,
    use: "raw-loader"
}
--------------------------------  equivalent way
原配置中替換
{
    test: /.css$/,
        use: ["raw-loader","raw-loader"]
}

更改配置后輸出

module.exports = "body{
    background: black;
}"

為什么加載兩次后輸出會(huì)不一樣,module.exports從何而來(lái)?

module.exports = function(content) {
        
    return "module.exports = " + JSON.stringify(content);
}

上面是raw源碼中截取的部分內(nèi)容,content是原樣讀取的文件,本身可能帶有 , 等,直接啟動(dòng)觸發(fā)入口

return fn.apply(context, args);  //loaderRunner.js line:119

一開(kāi)始輸出沒(méi)有 等,因?yàn)檫@些特殊字符沒(méi)有轉(zhuǎn)義,解釋執(zhí)行時(shí)保持其含義輸出,module.exports是raw-loader中自帶,webpack以此作為標(biāo)識(shí)解析loader中輸出的模塊化資源,否則webpack打包時(shí)無(wú)法處理資源,默認(rèn)為空對(duì)象{}。

modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);   執(zhí)行module函數(shù),有導(dǎo)出借助modle參數(shù),沒(méi)導(dǎo)出僅做執(zhí)行分割后文件邏輯使用  //line:20

--------
             (function(module, exports) {     //line:78

            module.exports = "body{
    background: black;
}"

             }),
 編譯后文件中自執(zhí)行函數(shù)中的參數(shù),每一個(gè)參數(shù)都代表一個(gè)模塊化的資源,模塊資源導(dǎo)出的資源被存儲(chǔ)到module上。
 ----------------
return module.exports;   // Return the exports of the module,在其它模塊中被引入時(shí)會(huì)被使用   //line:33
 

重復(fù)執(zhí)行兩次,第二次的輸入源是第一次的返回值

上面兩幅圖具體的說(shuō)明了輸出結(jié)果的起因,輸入源經(jīng)過(guò)stringify后特殊字符被轉(zhuǎn)義,拼接 "module.exports =" 后作為第二次執(zhí)行的輸入源,webpack在模塊處理時(shí),同一個(gè)資源最后一次輸出為準(zhǔn)。

下面一幅圖分別是單loader和雙loader編譯結(jié)果圖。

總結(jié)

通過(guò)簡(jiǎn)單的例子,復(fù)習(xí)了webpack編譯后的文件執(zhí)行流程,探索了編譯流程,研究意義還是有的。

相關(guān)問(wèn)題 https://segmentfault.com/q/10...

參考鏈接: loader1

參考鏈接: loader2

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82978.html

相關(guān)文章

  • 關(guān)于react+antd樣式不生效問(wèn)題的解決方式

      1、下面是添加antd組件樣式不生效代碼  在入口文件中引入import'antd/dist/antd.css'   樣式生效,但是生成警告   WARNINGin./node_modules/antd/dist/antd.css   Failedtoparsesourcemap:'webpack://antd/./components/time-   picker/s...

    3403771864 評(píng)論0 收藏0
  • 微前端 —— menu&&project1(React)

    摘要:前言微前端理論篇微前端項(xiàng)目上一篇中,我們完成了項(xiàng)目的搭建,算是完成了整個(gè)微前端架構(gòu)的一半工程了。項(xiàng)目項(xiàng)目是作為頁(yè)面的菜單顯示的,主要用于路由的控制。源碼地址源碼地址項(xiàng)目源碼地址微前端理論篇微前端項(xiàng)目微前端項(xiàng)目 前言 ????????微前端 —— 理論篇????????微前端 —— portal項(xiàng)目????????上一篇中,我們完成了portal項(xiàng)目的搭建,算是完成了整個(gè)微前端架構(gòu)的一半...

    Euphoria 評(píng)論0 收藏0
  • react項(xiàng)目關(guān)于webpack配置修改

    一、前言通過(guò)CRA腳手架構(gòu)建的項(xiàng)目,一般webpack配置是隱藏的,如果要修改,就要另外處理。想要修改webpack通常有兩種方式通過(guò)插件去增加或覆蓋webpack配置(方法一、方法二)或者釋放項(xiàng)目中的webpack配置,使之可見(jiàn),然后可以修改(方法三)本來(lái)CRA腳手架將webpack等復(fù)雜的配置封裝在項(xiàng)目中,后續(xù)可以通過(guò)更新react-scripts來(lái)體驗(yàn)版本升級(jí)帶來(lái)的新特性,但有些時(shí)候確實(shí)需要...

    社區(qū)管理員 評(píng)論0 收藏0
  • JS前端首屏優(yōu)化技巧

      訪(fǎng)問(wèn)時(shí)間超過(guò)3S對(duì)于用戶(hù)就十分痛苦,為考慮到用戶(hù)訪(fǎng)問(wèn)效果。為此我,首屏加載時(shí)間一頓操作,基本都在2s左右,這樣的首屏加載時(shí)間,對(duì)于用戶(hù)來(lái)說(shuō),算是可以接受的?! ∧俏叶寄男┎僮鳎肯旅婢蜑榇蠹艺故尽 〈虬治觥 ≡?package.json 中添加命令  "report":"vue-cli-servicebuild--report"  然后命令行執(zhí)行npm ...

    3403771864 評(píng)論0 收藏0
  • Next.js踩坑入門(mén)系列(二)— 添加Antd && CSS

    摘要:踩坑入門(mén)系列一二添加三目錄重構(gòu)再談路由陸續(xù)更新個(gè)人對(duì)于腳手架的有一種執(zhí)念,如果搭建出來(lái)就是一個(gè)首頁(yè)標(biāo)簽跳轉(zhuǎn),實(shí)在不是我這個(gè)處女座的風(fēng)格,因此第二步我就想引用框架,相信很多使用的開(kāi)發(fā)者用的也都是這個(gè)框架吧。 Next.js踩坑入門(mén)系列 (一) Hello Next.js (二) 添加Antd && CSS (三) 目錄重構(gòu)&&再談路由 陸續(xù)更新... 個(gè)人對(duì)于腳手架的UI有一種執(zhí)...

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

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

0條評(píng)論

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