nodejs中 require 方法的加載規則
方法的加載規則
1. 優先從緩存中加載
2. 核心模塊
3. 路徑形式的模塊
4. 第三方模塊
一、優先從緩存中加載
main.js:執行加載a.js模塊
require ('./a')
a.js:輸出a被加載了 執行加載b.js模塊
console.log('a.js被加載了')
let abd = require('./b')
console.log(abd)
b.js:
console.log('b.js被加載了')
module.exports = {
a: '小明'
}
結果
C:\Users\Administrator\Desktop\test>node ./main.js
a.js被加載了
b.js被加載了
{ a: '小明' }
二、node 中模塊的加載順序
以 var template = require(‘art-template’) 為例:
1. 先找到當前文件所處目錄中的 node_modules 目錄
2. 然后根據以下方式找到文件中的 main 屬性
3. main 屬性中就記錄了 art-template 的入口模塊
4. 然后加載使用這個第三方包,但是實際上最終加載的還是文件
5. 如果 package.json 文件不存在或者 main 指定的入口模塊是也沒有
6. 則 node 會自動找該目錄下的 index.js,也就是說 index.js 會作為一個默認備選項
7. 如果以上所有任何一個條件都不成立,則會進入上一級目錄中的 node_modules 目錄查找
8. 如果上一級還沒有,則繼續往上上一級查找
9. 如果直到當前磁盤根目錄還找不到,最后報錯: can not find module xxx
第三方模塊尋找順序: node_modules/art-template > package.json 文件 > main 屬性 > index.js
export default 和 export 區別
注意:
1. export與export default均可用於導出常量、函數、文件、模塊等
2. 在一個文件或模塊中,export可以有多個,export default僅有一個
4、在一個模塊中,可以同時使用export default 和export 向外暴露成員
5、使用export向外暴露的成員,只能使用{ }的形式來import,這種形式,叫做【按需導出】,不需要,可以不在{ }中定義
3、export default 向外暴露的成員,可以使用任意變量來接收
7、使用export導出的成員,必須嚴格按照導出時候的名稱,來使用{ }按需接收
8、使用export導出的成員,如果想換個變量名稱接收,可以使用as來起別名
例如
// test.js
let info = {
name: 'zs',
age: 20
}
export default info
export let title = '小星星'
export let content = '哈哈哈'
在main.js中接收,test.js使用export default 和 export 向外暴露的成員
import person, {title, content as content1} from './test.js'
console.log(person) // 其實就是test.js 中的 info
console.log(title) // 其實就是test.js 中的 title
console.log(content1) // 其實就是test.js 中的content 注意對應關系