node学习—node模块化细节

    科技2022-07-11  92

    node模块化细节

    一、node模块化细节1.模块的查找1.绝对路径2.相对路径./或../3.模块路径4.关于后缀名5.关于文件名 2.module对象3.require

    一、node模块化细节

    1.模块的查找

    1.绝对路径

    //a.js console.log('a.js'); //index.js require("F:\\****\\node学习\\1-2模块化细节\\a.js");

    2.相对路径./或…/

    //index.js require("./a.js");

    3.模块路径

    //index.js require("abc");

    导入一个模块,会按以下方式寻找。

    4.关于后缀名

    //index.js require("./a");

    如果没有a.js

    //index.js const result = require("./a"); console.log(result);

    5.关于文件名

    // src/index.js console.log('src/index.js'); // index.js require("./src");

    会自动寻找./src/index.js文件 在package.json中main字段是入口文件

    2.module对象

    记录了当前模块的信息。

    // index.js require("./b"); // b.js console.log(module);

    3.require

    // b.js console.log('当前模块路径:',__dirname); console.log('当前模块文件:',__filename); exports.c = 3; module.exports = { a: 1, b: 2 } this.m = 5; // index.js require("./b");

    导入一个模块的内部原理

    //这里只是一个过程原理,主要理解导入一个模块的过程 function require(modulePath){ //1.将modulePath转换为绝对路径:F:\****\node学习\1-2模块化细节\b.js //2.判断是否该模块已有缓存 if(require.cache["F:\\****\\node学习\\1-2模块化细节\\b.js"]){ return require.cache["F:\\****\\node学习\\1-2模块化细节\\b.js"].result; }; //3.读取文件内容 //4.包裹到一个函数中 function __temp(module,export,require,__dirname,__filename){ console.log('当前模块路径:',__dirname); console.log('当前模块文件:',__filename); exports.c = 3; module.exports = { a: 1, b: 2 }; this.m = 5; } //5.创建module对象 module.exports = {}; const exports = module.exports;//后将模块中的module.exports赋予module.exports,commonJs部分已讲过 __temp.call(module.exports,module,exports,require,module.id,module.filename); //一开始module.exports、module、exports都指向{},this也是。 //但模块的module.exports赋值,再改exports和this就没用了,最终返回的是return module.exports。 }

    所以模块里的this可以看做和exports相等。(module.exports被重新赋值了)

    // b.js console.log('当前模块路径:',__dirname); console.log('当前模块文件:',__filename); exports.c = 3; module.exports = { a: 1, b: 2 } this.m = 5; console.log(this); console.log(exports); console.log(module.exports); console.log(this === module.exports); console.log(exports === module.exports); console.log(this === exports);

    也可以通过this.c改变exports.c的值。

    Processed: 0.013, SQL: 8