<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中的require函數(shù)的具體使用方法

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

        Nodejs中的require函數(shù)的具體使用方法

        Nodejs中的require函數(shù)的具體使用方法:說(shuō)明 本文參考Node官網(wǎng)文檔版本為v11.12.0。 本文主要分析了Nodejs中require導(dǎo)入JSON和js文件時(shí)得到的結(jié)果,同時(shí)簡(jiǎn)單涉及到了Nodejs中模塊導(dǎo)出module.exports和exports的用法。 引言 在閱讀webpack源碼的過(guò)程當(dāng)中,見到如下一行代碼: const
        推薦度:
        導(dǎo)讀Nodejs中的require函數(shù)的具體使用方法:說(shuō)明 本文參考Node官網(wǎng)文檔版本為v11.12.0。 本文主要分析了Nodejs中require導(dǎo)入JSON和js文件時(shí)得到的結(jié)果,同時(shí)簡(jiǎn)單涉及到了Nodejs中模塊導(dǎo)出module.exports和exports的用法。 引言 在閱讀webpack源碼的過(guò)程當(dāng)中,見到如下一行代碼: const

        同時(shí)還給出了三種require的使用方法:

        // Importing a local module:
        const myLocalModule = require('./path/myLocalModule');
        
        // Importing a JSON file:
        const jsonData = require('./path/filename.json');
        
        // Importing a module from node_modules or Node.js built-in module:
        const crypto = require('crypto');
        
        

        從以上文檔中可以得出以下信息:

        1. require接受一個(gè)參數(shù),形參名為id,類型是String。
        2. require函數(shù)return的是模塊到處的內(nèi)容,類型是任意。
        3. require函數(shù)可以導(dǎo)入模塊、JSON文件、本地文件。模塊可以通過(guò)一個(gè)相對(duì)路徑從node_modules、本地模塊、JSON文件中導(dǎo)出,該路徑將針對(duì)__dirname變量(如果已定義)或者當(dāng)前工作目錄。

        require實(shí)踐

        在這里將分類討論require的實(shí)踐結(jié)論。

        require導(dǎo)入JSON

        JSON 是一種語(yǔ)法,用來(lái)序列化對(duì)象、數(shù)組、數(shù)值、字符串、布爾值和 null 。

        在文章的開頭就提到了通過(guò)require("./package.json")文件來(lái)讀取package.json文件中的version屬性。這里將嘗試導(dǎo)入info.json文件并查看相關(guān)信息。

        文件結(jié)構(gòu)目錄如下:

        .
        ├── index.js
        └── info.json

        將info.json文件的內(nèi)容修改為:

        {
         "name": "myInfo",
         "hasFriend": true,
         "salary": null,
         "version": "v1.0.0",
         "author": {
         "nickname": "Hello Kitty",
         "age": 20,
         "friends": [
         {
         "nickname": "snowy",
         "age": 999
         }
         ]
         }
        }
        
        

        在info.json當(dāng)中,包含了字符串、布爾值、null、數(shù)字、對(duì)象和數(shù)組。

        將index.js的內(nèi)容修改如下并在當(dāng)前terminal運(yùn)行命令 node index.js ,得到如下結(jié)果:

        const info = require("./info.json")
        console.log(Object.prototype.toString.call(info)) // [object Object]
        console.log(info.version) // v1.0.0
        console.log(info.hasFriend) // true
        console.log(info.salary) // null
        console.log(info.author.nickname) // Hello Kitty
        console.log(info.author.friends) // [ { nickname: 'snowy', age: 999 } ]
        
        

        可以看到,require導(dǎo)入一個(gè)JSON文件的時(shí)候,返回了一個(gè)對(duì)象,Nodejs可以直接訪問(wèn)這個(gè)對(duì)象里的所有屬性,包括String、Boolean、Number、Null、Object、Array。個(gè)人猜測(cè)這里可能用到了類似于JSON.parse()的方法。

        通過(guò)這個(gè)結(jié)論也得出了一種思路,即通過(guò)require方法傳入JSON文件來(lái)讀取某些值,如在文章開頭中,webpack通過(guò)讀取package.json文件獲取到了version值。

        require導(dǎo)入本地js文件

        文件結(jié)構(gòu)目錄如下:

        .
        ├── index.js
        ├── module_a.js
        └── module_b.js
        
        

        index.js文件中,分別按順序?qū)肓薽odule_a和module_b并賦值,然后將這兩個(gè)變量打印,內(nèi)容如下:

        console.log("*** index.js開始執(zhí)行 ***")
        const module_a = require("./module_a")
        const module_b = require("./module_b")
        console.log(module_a, "*** 打印module_a ***")
        console.log(module_b, "*** 打印module_b ***")
        console.log("*** index.js結(jié)束執(zhí)行 ***")
        
        

        module_a文件中,未指定module.exports或者exports,但是添加了一個(gè)異步執(zhí)行語(yǔ)句setTimeout,內(nèi)容如下:

        console.log("** module_a開始執(zhí)行 **")
        let name = "I'm module_a"
        setTimeout(() => {
         console.log(name, "** setTimeout打印a的名字 **")
        }, 0)
        console.log("** module_a結(jié)束執(zhí)行 **")

        module_b文件中,指定了module.exports(也可以換成exports.name,但是不能直接使用exports等于某個(gè)對(duì)象,因?yàn)閑xports和module.exports其實(shí)是指向了一個(gè)地址,引用了相同的對(duì)象,如果使用exports等于其他的引用類型,則不再指向module.exports,無(wú)法改變module.exports里的內(nèi)容),內(nèi)容如下:

        console.log("** module_b開始執(zhí)行 **")
        let name = "I'm module_b"
        console.log(name, "** 打印b的名字 **")
        module.exports = {
         name
        }
        console.log("** module_b結(jié)束執(zhí)行 **")
        
        

        在當(dāng)前目錄terminal下運(yùn)行 node index.js 運(yùn)行得到如下輸出:

        *** index.js開始執(zhí)行 ***
        ** module_a開始執(zhí)行 **
        ** module_a結(jié)束執(zhí)行 **
        ** module_b開始執(zhí)行 **
        I am module_b ** 打印b的名字 **
        ** module_b結(jié)束執(zhí)行 **
        {} '*** 打印module_a ***'
        { name: 'I am module_b' } '*** 打印module_b ***'
        *** index.js結(jié)束執(zhí)行 ***
        I am module_a ** setTimeout打印a的名字 **

        通過(guò)以上執(zhí)行結(jié)果可以得出結(jié)論:

        1. require某個(gè)js文件時(shí),如果未通過(guò)exports或者module.exports指定導(dǎo)出內(nèi)容,則require返回的結(jié)果是一個(gè)空對(duì)象;反之可以通過(guò)module.export或者給exports屬性賦值來(lái)導(dǎo)出指定內(nèi)容。
        2. require某個(gè)js文件時(shí),該文件會(huì)立即sync執(zhí)行。

        require導(dǎo)入模塊

        我們先選擇一個(gè)npm包——cors。 進(jìn)入文件夾,運(yùn)行一下命令:

        npm init -y // 初始化
        echo -e "let cors = require(\"cors\")\nconsole.log(cors)" > index.js // 生成index.js文件
        npm install cors --save // 安裝cors包
        
        

        文件結(jié)構(gòu)如下(...處省略了其他的模塊):

        .
        ├── index.js
        ├── node_modules
        │ ├── cors
        │ │ ├── CONTRIBUTING.md
        │ │ ├── HISTORY.md
        │ │ ├── LICENSE
        │ │ ├── README.md
        │ │ ├── lib
        │ │ │ └── index.js
        │ │ └── package.json
        │ │ ...
        ├── package-lock.json
        └── package.json

        index.js中的內(nèi)容如下:

        let cors = require("cors")
        console.log(cors)

        運(yùn)行 node index.js ,得出以下結(jié)果:

        [Function: middlewareWrapper]

        找到node_modules下的cors模塊文件夾,觀察cros模塊中的package.json文件,找到main字段: "main": "./lib/index.js" ,找到main字段指向的文件,發(fā)現(xiàn)這是一個(gè)IIFE,在IIFE中的代碼中添加,console.log("hello cors"),模擬代碼結(jié)構(gòu)如下:

        (function () {
         'use strict';
         console.log("hello cors"); // 這是手動(dòng)添加的代碼
         ...
         function middlewareWrapper(o) {
         ...
         }
         module.exports = middlewareWrapper;
        })()
        
        

        再次運(yùn)行 node index.js ,得出以下結(jié)果:

        hello cors
        [Function: middlewareWrapper]

        為什么會(huì)打印出 hello cors 呢?因?yàn)閞equire模塊的時(shí)候,引入的是該模塊package.json文件中main字段指向的文件。而這個(gè)js文件會(huì)自動(dòng)執(zhí)行,跟require引用本地js文件是相同的。

        packjson文檔

        在npm的官方網(wǎng)站中可以找到關(guān)于package.json中的main字段定義。

        main   The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require("foo"), then your main module's exports object will be returned.   This should be a module ID relative to the root of your package folder   For most modules, it makes the most sense to have a main script and often not much else.

        在以上說(shuō)明中可以得出以下結(jié)論:

        1. main字段是一個(gè)模塊ID,是程序的主入口。
        2. 當(dāng)使用require("xxx")的時(shí)候,導(dǎo)入的是main字段對(duì)應(yīng)的js文件里的module.exports。

        所以require導(dǎo)入模塊的時(shí)候,是運(yùn)行的對(duì)應(yīng)模塊package.json中main字段指定的文件。

        聲明:本網(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中的require函數(shù)的具體使用方法

        Nodejs中的require函數(shù)的具體使用方法:說(shuō)明 本文參考Node官網(wǎng)文檔版本為v11.12.0。 本文主要分析了Nodejs中require導(dǎo)入JSON和js文件時(shí)得到的結(jié)果,同時(shí)簡(jiǎn)單涉及到了Nodejs中模塊導(dǎo)出module.exports和exports的用法。 引言 在閱讀webpack源碼的過(guò)程當(dāng)中,見到如下一行代碼: const
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码AV日韩AV网站| 成人片黄网站色大片免费观看cn | 亚洲黄色在线网站| 我们的2018在线观看免费高清| 狼人大香伊蕉国产WWW亚洲| 国产亚洲精久久久久久无码| 在线观看免费高清视频| caoporm碰最新免费公开视频| a毛片在线还看免费网站| 亚洲一级毛片免费在线观看| 午夜影院免费观看| 亚洲欧洲国产综合AV无码久久| 亚洲午夜日韩高清一区| 69成人免费视频| 中文字字幕在线高清免费电影| 亚洲日韩国产精品无码av| 免费中文字幕一级毛片| 无码国产精品一区二区免费模式| 亚洲精品动漫免费二区| 亚洲国产精品一区二区久久hs| 中文字幕视频免费在线观看| 亚洲三级中文字幕| 亚洲国产精品无码久久久秋霞2| 免费无码一区二区三区蜜桃大| 国产精品亚洲色图| 亚洲国语精品自产拍在线观看| 免费国产小视频在线观看| av无码久久久久不卡免费网站| 国产免费区在线观看十分钟 | 亚洲美女色在线欧洲美女| 又黄又大又爽免费视频| 欧亚精品一区三区免费| 久久精品免费观看| 黄色三级三级免费看| 亚洲成A∨人片在线观看不卡| 可以免费观看一级毛片黄a| 欧亚精品一区三区免费| 色播精品免费小视频| 久久久久久AV无码免费网站下载| 日本特黄特色AAA大片免费| 亚洲av无码无线在线观看|