通過B站,老陳打碼2020最新最全Node實戰課程(含爬蟲和web服務器開發)
進行學習
一、模塊的導出和導入
1. require
-
用於: 用來在一個模塊中引入另外一個模塊。
-
用法: 模塊名可以用絕對路徑也可以用相對路徑,模塊的後綴名.js可以省略。
let a = require('./index1');
let b = require('nodeStudy/src/index1');
let c = require('./index1.js');
- 作用:
- 執行導入的模塊中的代碼 (只會執行一次:多次導入,一次執行)
- 返回導入模塊的 接口對象
- 注意:
在沒有任何內容導出去的情況下,獲取某個文件的內容,會得到一個空對象{}
2. exports
-
用於: 導出當前模塊的公共方法或屬性
-
用法:
exports.name
, (name爲導出的對象名)
var a = 1;
// exports就是默認導出的對象
exports.a = a;
exports.add = function () {
let i = 0
console.log(++i)
}
3. module.exports
- 用於: 導出一個默認對象,沒有指定對象名,常見於修改模塊的原始導出對象
- 用法:
module.exports = function () {
console.log('hello world!')
}
4. exports
和module.exports
的不同
- 系統默認設置了:
exports
=module.exports
,即exports
指向module.exports
- 系統只會讀取
modeul.exports
的內容,一切以module.exports
爲準 - 使用
exports
時,只能單個設置屬性exports.a = a
- 使用
module.exports
可以單個設置屬性,也可以整個賦值
二、模塊的初始化
一個模塊中的JS代碼僅在模塊第一次被使用時執行一次,並且在使用的過程中進行初始化,之後緩存起來便於後續繼續使用。
比如:
導入模塊有一個 console.log()
在導入模塊有兩個 require
,那麼只會console.log()
一次
三、主模塊
- 含義: 通過命令行參數傳遞給NodeJS以啓動程序的模塊被稱爲主模塊
- 作用: 主模塊負責調度組成整個程序的其它模塊完成工作
- 實例:
當我們在使用vue、axios時,通常都會有一個啓動的主文件,例如vue的main.js
,axios的request.js
,通常這類文件,就是主入口,也是主模塊
四、require
加載第三方包的步驟
通過npm
下載的第三方包,都是通過let xx = require('第三方包')
,接下來是原理步驟
require('第三方包名')
優先在加載該包的模塊的同級目錄node_modules
中查找第三方包。
- 找到該第三方包中的
package.json
文件,並且找到裏面的main
屬性對應的入口模塊,該入口模塊即爲加載的第三方模塊
-
如果在要加載的第三方包中沒有找到
package.json
文件或者是package.json
文件中沒有main
屬性,則默認加載第三方包中的index.js
文件。 -
如果在加載第三方模塊的文件的同級目錄沒有找到
node_modules
文件夾,或者以上所有情況都沒有找到,則會向上一級父級目錄下查找node_modules
文件夾,查找規則如上一致。 -
如果一直找到該模塊的磁盤根路徑都沒有找到,則會報錯:
can not find module xxx
。