<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í)百科 - 正文

        Nodejs模塊載入運(yùn)行原理

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

        Nodejs模塊載入運(yùn)行原理

        Nodejs模塊載入運(yùn)行原理:前言 使用Nodejs,就不可避免地引用第三方模塊,它們有些是Nodejs自帶的(例:http,net...),有些是發(fā)布在npm上的(例:mssql,elasticsearch...) 本篇章聚焦3個(gè)問(wèn)題: Nodejs模塊的加載過(guò)程。 應(yīng)用啟動(dòng)的過(guò)程。 應(yīng)用如何加載依賴模塊。 1.模塊的
        推薦度:
        導(dǎo)讀Nodejs模塊載入運(yùn)行原理:前言 使用Nodejs,就不可避免地引用第三方模塊,它們有些是Nodejs自帶的(例:http,net...),有些是發(fā)布在npm上的(例:mssql,elasticsearch...) 本篇章聚焦3個(gè)問(wèn)題: Nodejs模塊的加載過(guò)程。 應(yīng)用啟動(dòng)的過(guò)程。 應(yīng)用如何加載依賴模塊。 1.模塊的

        前言

        使用Nodejs,就不可避免地引用第三方模塊,它們有些是Nodejs自帶的(例:http,net...),有些是發(fā)布在npm上的(例:mssql,elasticsearch...)

        本篇章聚焦3個(gè)問(wèn)題:

        1. Nodejs模塊的加載過(guò)程。
        2. 應(yīng)用啟動(dòng)的過(guò)程。
        3. 應(yīng)用如何加載依賴模塊。

        1.模塊的加載過(guò)程

        Nodejs 模塊大概可分為4種:

        a) builtin module Nodejs中以C++形式提供的模塊。

        b) constant module Nodejs中定義常量的模塊。

        c) native module Nodejs中以javascript形式提供的模塊。

        d) 第三方module 由第三方提供的模塊。

        我們先看builtin module 和 native module的生成過(guò)程。

        native JS module的生成相對(duì)復(fù)雜一些,編譯后,會(huì)在/out/release/obj/gen目錄下生成一個(gè)node_natives.h。

        該文件是由js2c.py生成,它會(huì)把Nodejs源碼中的lib目錄下,所有js文件轉(zhuǎn)成ASCII碼,并存放在相應(yīng)的數(shù)組里。

        builtin C++ module 生成過(guò)程相對(duì)簡(jiǎn)單,每個(gè)builtin C++的模塊入口,都會(huì)通過(guò)宏NODE_MODULE_CONTEXT_AWARE_BUILTIN擴(kuò)展成一個(gè)func,例如對(duì)tcp_wrap模塊而言,會(huì)擴(kuò)展成static void register_tcp_wrap() attribute(constructor) 函數(shù)。

        熟悉GCC的朋友都知道,attribute(constructor)修飾的函數(shù)會(huì)在Nodejs的main()函數(shù)之前被執(zhí)行,也就是說(shuō),builtin C++ module 會(huì)在main()函數(shù)之前被載入到modlist_builtin列表,而modlist_builtin是一個(gè)struct node_module類型的指針,get_builtin_module()會(huì)遍歷查找我們所需的模塊。

        其實(shí)無(wú)論是naive JS module 還是 builtin C++ module,最終都是要被編譯成可執(zhí)行文件。對(duì)于兩者的提取方式,卻大不相同,js module 使用process.binding('natives'),而C++ module 則直接使用get_builtin_module()。

        在node.cc里面提供了一個(gè)binding()函數(shù),當(dāng)我們應(yīng)用require()來(lái)引用另外一個(gè)模塊時(shí),binding()函數(shù)便會(huì)被引入。下面我們分析一下這個(gè)函數(shù):

        可以目測(cè)到,函數(shù)主要為三個(gè)模塊服務(wù):builtin,constants和native。

        builtin優(yōu)先級(jí)最高,會(huì)到modlist_builtin中查找,過(guò)程非常簡(jiǎn)單,遍歷整個(gè)列表,查找相同名字的模塊即可。找到后,模塊的注冊(cè)函數(shù)會(huì)被先執(zhí)行,然后將數(shù)據(jù)exports返回。

        constants模塊優(yōu)先級(jí)次之,Nodejs中的常量定義通過(guò)constants導(dǎo)出。

        native 優(yōu)先級(jí)最低。

        2.應(yīng)用啟動(dòng)的過(guò)程

        上圖為一個(gè)流程圖,它描述了test.js做為參數(shù)啟動(dòng)開(kāi)始,最終被執(zhí)行。整個(gè)過(guò)程可以分為4步:

        1.可執(zhí)行文件 node : node入口,在啟動(dòng)過(guò)程中主要扮演環(huán)境準(zhǔn)備工作

        2.src/node.js:?jiǎn)?dòng)腳本

        3.Native Module:為module.js 的執(zhí)行做準(zhǔn)備工作

        4.module.js:native module,用來(lái)加載,編譯,執(zhí)行應(yīng)用程序

        應(yīng)用如何加載依賴模塊

        前面提到NativeModule.require()只負(fù)責(zé)幫助引用natives module,這對(duì)于lib/module.js而言已經(jīng)足夠了。

        但是很明顯,一般應(yīng)用不但需要引用matives module,還要引用第三方模塊,讓我們看一下module.js中的Module.prototype._require()函數(shù)中。

        聲明:本網(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

        文檔

        Nodejs模塊載入運(yùn)行原理

        Nodejs模塊載入運(yùn)行原理:前言 使用Nodejs,就不可避免地引用第三方模塊,它們有些是Nodejs自帶的(例:http,net...),有些是發(fā)布在npm上的(例:mssql,elasticsearch...) 本篇章聚焦3個(gè)問(wèn)題: Nodejs模塊的加載過(guò)程。 應(yīng)用啟動(dòng)的過(guò)程。 應(yīng)用如何加載依賴模塊。 1.模塊的
        推薦度:
        標(biāo)簽: 加載 模塊 運(yùn)行
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專題
        Top
        主站蜘蛛池模板: 国产精品视频白浆免费视频| 老司机永久免费网站在线观看| 成人国产网站v片免费观看| 一区二区三区免费高清视频| 免费国产污网站在线观看15| 亚洲第一精品在线视频| 最近中文字幕无免费| 亚洲国产精品综合久久2007| 一级毛片在线播放免费| 狠狠亚洲狠狠欧洲2019| 成人av片无码免费天天看| 国精无码欧精品亚洲一区| 99国产精品免费视频观看| 亚洲精品视频免费看| 青青草免费在线视频| 亚洲国产精品99久久久久久| 最近免费中文字幕mv在线电影| 亚洲精品中文字幕无码AV| 欧美三级在线电影免费| 国产亚洲精品欧洲在线观看| 久久久久亚洲精品男人的天堂| 无码国产精品一区二区免费16| 又大又硬又爽免费视频| 久青草视频97国内免费影视| 日本特黄特色aa大片免费| 久久久无码精品亚洲日韩京东传媒 | 2022年亚洲午夜一区二区福利| 成年网站免费视频A在线双飞| 亚洲国产国产综合一区首页| aⅴ免费在线观看| 国产亚洲精品美女2020久久| 国产V亚洲V天堂A无码| selaoban在线视频免费精品| 亚洲伦理一区二区| 国产精品免费视频播放器| 免费a级毛片无码a∨免费软件| 亚洲日本一区二区一本一道| 99久久国产免费中文无字幕| 在线观看亚洲专区| 亚洲专区先锋影音| 亚洲国产精品成人网址天堂|