?
?
?
Table of Contents
- 1. 全局對象
- 2. 代碼執行優先級
- 3. 模塊導入
- 4. 模塊加載
- 4.1. 文件模塊優先級
- 4.2. 文件夾加載優先級
- 4.2.1. 包(文件夾)下的入口文件優先級
- 4.2.2. 包加載優先級
- 5. 核心模塊的簡單使用
- 5.1. events
1 全局對象
- global
console.log(global);// Object [global] {
// global: [Circular],
// clearInterval: [Function: clearInterval],
// clearTimeout: [Function: clearTimeout],
// setInterval: [Function: setInterval],
// setTimeout: [Function: setTimeout] { [Symbol(util.promisify.custom)]: [Function] },
// queueMicrotask: [Function: queueMicrotask],
// clearImmediate: [Function: clearImmediate],
// setImmediate: [Function: setImmediate] {
// [Symbol(util.promisify.custom)]: [Function]
// }
// }
- console
console.log(console)// {
// log: [Function: bound consoleCall],
// warn: [Function: bound consoleCall],
// dir: [Function: bound consoleCall],
// time: [Function: bound consoleCall],
// timeEnd: [Function: bound consoleCall],
// timeLog: [Function: bound consoleCall],
// trace: [Function: bound consoleCall],
// assert: [Function: bound consoleCall],
// clear: [Function: bound consoleCall],
// count: [Function: bound consoleCall],
// countReset: [Function: bound consoleCall],
// group: [Function: bound consoleCall],
// groupEnd: [Function: bound consoleCall],
// table: [Function: bound consoleCall],
// debug: [Function: bound consoleCall],
// info: [Function: bound consoleCall],
// dirxml: [Function: bound consoleCall],
// error: [Function: bound consoleCall],
// groupCollapsed: [Function: bound consoleCall],
// Console: [Function: Console],
// profile: [Function: profile],
// profileEnd: [Function: profileEnd],
// timeStamp: [Function: timeStamp],
// context: [Function: context],
// [Symbol(kBindStreamsEager)]: [Function: bound ],
// [Symbol(kBindStreamsLazy)]: [Function: bound ],
// [Symbol(kBindProperties)]: [Function: bound ],
// [Symbol(kWriteToConsole)]: [Function: bound ],
// [Symbol(kGetInspectOptions)]: [Function: bound ],
// [Symbol(kFormatForStdout)]: [Function: bound ],
// [Symbol(kFormatForStderr)]: [Function: bound ]
// }
- exports, require, module, _filename, _dirname(模塊參數)
console.log(arguments.callee + '');// function (exports, require, module, __filename, __dirname) {
// console.log(arguments.callee + '');
2 代碼執行優先級
同步代碼優先,例子如下
// 代碼執行優先級
setTimeout(function () {setTimeout(function () {console.log('time out');}, 0);new Promise(resolve => {setTimeout(function () {console.log('start in Promise');}, 1);console.log('beg');resolve();console.log('end');setTimeout(function () {console.log('end in Promise');}, 0);}).then(() => {console.log('finish');});console.log('不要調皮');
}, 100);// beg
// end
// 不要調皮
// finish
// time out
// start in Promise
// end in Promise
3 模塊導入
同步導入,module.exports =
exports ==> true
{ test } ? tree
.
├── index.js
└── test.js
- ./index.js
console.log("index.js");
- ./test.js
require('./index.js');
console.log('test.js');
output: 導入之后才會繼續執行代碼
index.js test.js
4 模塊加載
4.1 文件模塊優先級
這里只考慮 .js .json文件路徑加載
- 文件結構
. ├── a.js ├── a.json ├── b.json └── test.js
- a.js
module.exports = "js文件優先";
- a.json
{"s": "json文件優先"
}
- b.json
{"main" : "json 文件也支持省略擴展名的方式加載"
}
- test.js
// 測試js文件先加載
console.log(require('./a'));
// 證明json也可以加載
console.log(require('./b'));
- output
- 默認文件加載js先于json文件
js文件優先
{ main: 'json 文件也支持省略擴展名的方式加載' }
4.2 文件夾加載優先級
4.2.1 包(文件夾)下的入口文件優先級
- 文件結構
. ├── a │?? ├── index.js │?? ├── m.js │?? └── package.json ├── b │?? ├── index.js │?? └── package.json ├── c │?? └── index.js └── test.js
- ./a
- index.js
module.exports = "index.js文件優先";
- m.js
module.exports = "package.json文件優先";
- package.json
{"name": "a","version": "1.0.0","main" : "m.js" }
- ./b
- index.js
module.exports = "./b/index.js文件優先";
- package.json
{"name": "a","version": "1.0.0" }
- ./c
- index.js
module.exports = "index.js支持默認加載";
- ./test.js
// 優先加載packagae.json文件 console.log(require('./a')); // packagae.json中main屬性指定加載某文件 console.log(require('./b')); // index.js也支持默認加載 console.log(require('./c'));
- output
package.json文件中有main優先于index.js文件
package.json文件優先 ./b/index.js文件優先 index.js支持默認加載
4.2.2 包加載優先級
- 路徑加載
- 文件結構
. ├── fs │?? └── index.js └── test.js
- ./fs/index.js
module.exports = "路徑加載優先級高";
- ./fs/test.js
// 加載核心模塊 console.log(require('fs')); // 第三方模塊 console.log(require('./fs'));
- output
路徑加載優先級高于核心模塊
{appendFile: [Function: appendFile],appendFileSync: [Function: appendFileSync],access: [Function: access],accessSync: [Function: accessSync],chown: [Function: chown],promises: [Getter]..........//還有很多 } 路徑加載優先級高
- 非路徑加載
- 文件結構
. ├── node_modules │?? ├── fs │?? │?? └── index.js │?? └── tts │?? └── index.js └── test.js
- ./nodenodules./fs/index.js
module.exports = "./node_nodules./fs";
- ./nodenodules./tts/index.js
module.exports = "./node_nodules./tts";
- ./test.js
// 判斷第三方模塊和核心模塊的優先級 console.log(require('fs')); // 第三方模塊可以加載 console.log(require('tts'));
- output
- 核心模塊加載優先于第三方模塊(nodemodules)
{appendFile: [Function: appendFile],appendFileSync: [Function: appendFileSync],access: [Function: access],......//很多promises: [Getter] } ./node_nodules./tts
- 第三方模塊查找過程(非路徑查找)
- 文件結構
. ├── a │?? ├── b │?? │?? ├── c │?? │?? │?? ├── node_modules │?? │?? │?? │?? └── tts1 │?? │?? │?? │?? └── index.js │?? │?? │?? └── t.js │?? │?? └── node_modules │?? │?? └── tts2 │?? │?? └── index.js │?? └── node_modules │?? └── tts3 │?? └── index.js └── node_modules└── tts4└── index.js
- module.paths 中列表的順序查找
- 遞歸向上級目錄查找
['C:\\a\\b\\c\\node_modules','C:\\a\\b\\node_modules','C:\\a\\node_modules','C:\\node_modules' ]
5 核心模塊的簡單使用
5.1 events
繼承了事件類,自身不用實現事件類
const events = require('events');class Teacher extends events {constructor(sec = 2000) {super();this.sec = sec;this.doing();}doing() {let cnt = 0;setInterval(() => {++cnt;this.emit('class', {cnt});}, this.sec);}
}const t = new Teacher();
t.on('class', function (args) {console.log('time to class:', args.cnt);
});
Created: 2019-06-26 周三 09:31
Validate