<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        淺談vue中.vue文件解析流程

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:15:58
        文檔

        淺談vue中.vue文件解析流程

        淺談vue中.vue文件解析流程:我們平時(shí)寫的 .vue 文件稱為 SFC(Single File Components),本文介紹將 SFC 解析為 descriptor 這一過(guò)程在 vue 中是如何執(zhí)行的。 vue 提供了一個(gè) compiler.parseComponent(file, [options]) 方法,來(lái)將 .vue 文件解析成一個(gè) de
        推薦度:
        導(dǎo)讀淺談vue中.vue文件解析流程:我們平時(shí)寫的 .vue 文件稱為 SFC(Single File Components),本文介紹將 SFC 解析為 descriptor 這一過(guò)程在 vue 中是如何執(zhí)行的。 vue 提供了一個(gè) compiler.parseComponent(file, [options]) 方法,來(lái)將 .vue 文件解析成一個(gè) de

        我們平時(shí)寫的 .vue 文件稱為 SFC(Single File Components),本文介紹將 SFC 解析為 descriptor 這一過(guò)程在 vue 中是如何執(zhí)行的。

        vue 提供了一個(gè) compiler.parseComponent(file, [options]) 方法,來(lái)將 .vue 文件解析成一個(gè) descriptor:

        // an object format describing a single-file component.
        declare type SFCDescriptor = {
         template: ?SFCBlock;
         script: ?SFCBlock;
         styles: Array<SFCBlock>;
         customBlocks: Array<SFCBlock>;
        };
        

        文件入口

        解析 sfc 文件的入口在 src/sfc/parser.js 中,該文件 export 了 parseComponent 方法, parseComponent 方法用來(lái)對(duì)單文件組件進(jìn)行編譯。

        接下來(lái)我們看看 parseComponent 方法都做了哪些事情。

        parseComponent 方法

        function start(tag, attrs, unary, start, end,){
        }
        
        function end(tag, start, end){
        }
        
        parseHTML(content, {
         start,
         end
        })
        
        

        parseComponent 方法中定義了 start``end 兩個(gè)函數(shù),之后調(diào)用了 parseHTML 方法來(lái)對(duì) .vue 文件內(nèi)容踐行編譯。

        那么這個(gè) parseHTML 方法是做啥的呢?

        parseHTML 方法

        該方法看名字就知道是一個(gè) html-parser,可以簡(jiǎn)單理解為,解析到每個(gè)起始標(biāo)簽時(shí),調(diào)用 option 中的 start;每個(gè)標(biāo)簽結(jié)束時(shí),調(diào)用 option 中的 end。

        對(duì)應(yīng)到這里,就是分別調(diào)用 parseComponent 方法中定義的 start 和 end 函數(shù)。

        在 parseComponent 中維護(hù)一個(gè) depth 變量,在 start 中將 depth++ ,在 end 中 depth-- 。那么,每個(gè) depth === 0 的標(biāo)簽就是我們需要獲取的信息,包含 template、script、style 以及一些自定義標(biāo)簽。

        start

        每當(dāng)遇到一個(gè)起始標(biāo)簽時(shí),執(zhí)行 start 函數(shù)。

        1、記錄下 currentBlock。

        每個(gè) currentBlock 包含以下內(nèi)容:

        declare type SFCBlock = {
         type: string;
         content: string;
         start?: number;
         end?: number;
         lang?: string;
         src?: string;
         scoped?: boolean;
         module?: string | boolean;
        };

        2、根據(jù) tag 名稱,將 currentBlock 對(duì)象在返回結(jié)果對(duì)象中。

        返回結(jié)果對(duì)象定義為 sfc,如果tag不是 script,style,template 中的任一個(gè),就放在 sfc.customBlocks 中。如果是style,就放在 sfc.styles 中。script 和 template 則直接放在 sfc 下。

        if (isSpecialTag(tag)) {
         checkAttrs(currentBlock, attrs)
         if (tag === 'style') {
         sfc.styles.push(currentBlock)
         } else {
         sfc[tag] = currentBlock
         }
        } else { // custom blocks
         sfc.customBlocks.push(currentBlock)
        }
        

        end

        每當(dāng)遇到一個(gè)結(jié)束標(biāo)簽時(shí),執(zhí)行 end 函數(shù)。

        1、如果當(dāng)前是第一層標(biāo)簽(depth === 1),并且 currentBlock 變量存在,那么取出這部分text,放在 currentBlock.content 中。

        if (depth === 1 && currentBlock) {
         currentBlock.end = start
         let text = deindent(content.slice(currentBlock.start, currentBlock.end))
         // pad content so that linters and pre-processors can output correct
         // line numbers in errors and warnings
         if (currentBlock.type !== 'template' && options.pad) {
         text = padContent(currentBlock, options.pad) + text
         }
         currentBlock.content = text
         currentBlock = null
        }
        

        2、depth-- 。

        得到 descriptor

        在將 .vue 整個(gè)遍歷一遍后,得到的 sfc 對(duì)象即為我們需要的結(jié)果。

        生成 .js ?

        compiler.parseComponent(file, [options]) 得到的只是一個(gè)組件的 SFCDescriptor ,最終編譯成.js 文件是交給 vue-loader 等庫(kù)來(lái)做的。

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        淺談vue中.vue文件解析流程

        淺談vue中.vue文件解析流程:我們平時(shí)寫的 .vue 文件稱為 SFC(Single File Components),本文介紹將 SFC 解析為 descriptor 這一過(guò)程在 vue 中是如何執(zhí)行的。 vue 提供了一個(gè) compiler.parseComponent(file, [options]) 方法,來(lái)將 .vue 文件解析成一個(gè) de
        推薦度:
        標(biāo)簽: 文件 流程 VUE
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲乱妇老熟女爽到高潮的片| 亚洲精品乱码久久久久久按摩 | 免费黄色电影在线观看| 亚洲国产日韩在线观频| 国产VA免费精品高清在线| 精品亚洲成α人无码成α在线观看 | 亚洲国产黄在线观看| 四虎影视久久久免费观看| 亚洲片国产一区一级在线观看| aa在线免费观看| 国产精品久久久亚洲| 59pao成国产成视频永久免费| 亚洲嫩草影院在线观看| 拍拍拍又黄又爽无挡视频免费| 色噜噜噜噜亚洲第一| 久久精品国产亚洲7777| 一级毛片在线免费看| 亚洲三级视频在线观看 | 77777亚洲午夜久久多人| 中国好声音第二季免费播放| 亚洲午夜在线电影| 成人免费一区二区无码视频| 日韩一级片免费观看| 亚洲VA中文字幕无码毛片| 在线看片v免费观看视频777| 在线精品自拍亚洲第一区| 亚洲乱码中文字幕综合| 在线观看免费人成视频色| 四虎成人精品国产永久免费无码| 亚洲av无码精品网站| 毛片大全免费观看| 久久久久久毛片免费看| 精品亚洲AV无码一区二区三区| 国产成人免费一区二区三区| 久久aⅴ免费观看| 亚洲一本一道一区二区三区| 亚洲永久精品ww47| 日本妇人成熟免费中文字幕| 一级毛片视频免费| jlzzjlzz亚洲jzjzjz| 国产成A人亚洲精V品无码性色|