当前位置: 首页 > 后端技术 > Node.js

NodeJS模块化

时间:2023-04-03 13:59:00 Node.js

NodeJS遵循commonJs语法规范import:require()export:module.exportsorexportsNode中的模块化在Node中,一个JS就是一个模块在Node中,每个JS文件的js代码都是在一个函数中独立运行的,而不是全局范围,它如何证明是一个函数?我们可以只输出函数:console.log(arguments)当我们输出console.log(arguments.callee+'')时,我们会发现输出的是一个函数。(arguments.callee保存当前函数)这个函数看起来是这样的://exports:这个对象用来对外暴露变量或者调用//require:函数,用来引入外部模块//module:模块代表什么当前模块本身,exports是模块的一个属性。所以我们可以使用exports导出或者使用module.exports导出//__filename:当前文件的完整路径//__dirname:当前文件所在文件夹的路径function(exports,require,module,__filename,__dirname){//我在01_module.js中输出的是我当前js文件的功能constmd=require('./02_module')console.log(md.name)console.log(md.num)console.log(md.sayHi())console.log(arguments.callee+'')}在Node中,一个模块中的变量和函数不能在其他函数中直接访问。我们可以通过exports或者module.exports对外暴露变量和方法在Node中,通过require()函数导入外部模块require()可以传入一个文件路径作为参数,Node会根据路径自动导入外部模块注意这里的路径,如果使用相对路径,必须以./或../开头,不能省略。在使用require()导入模块后,该函数返回一个对象,该对象表示导入的模块。简单来说,module.exports和exports的区别其实就是exports=module.exports。exports只能使用.将内部变量暴露给外部。exports.x=xxxmodule.exports可以以.或者直接赋值mudule.exports.x=xxxmodule.exports={}为什么exports不能直接赋值呢?这涉及到数据的类型和内存(数据存储位置)。数据类型分为值类型和引用类型。值类型也称为基本数据类型或简单数据类型。引用类型也称为复杂数据类型。内存分为站内存和堆。记忆。我们的值类型是直接放在栈内存中的,每个数据都是相互独立的。引用类型的数据是放在堆内存中的,但是它有一个存储地址,这个地址是放在栈内存中的。//值数据类型,变量a存放在栈内存中,值为100vara=100//引用数据类型,变量b存放在栈内存中,值为引用类型数据在堆中的地址memory,andthereferenceproperty数据本身存储在堆内存中varb={name:'Sedum',age:18}exports=module.exports,本来export指向模块的exports,但是如果我们使用exports={},那么export的指向就变了,不再指向module.exports。NodeJS模块分为两类:核心模块由Node引擎提供。核心模块标识符是文件模块的名称。文件模块由用户创建。模块标识符是文件的路径。简单demo//01_module.js----引入constmd=require('./02_module')constfs=require('fs')console.log(md.name)console.log(md.num)console。log(md.sayHi())//02_module.js----exportsconsole.log(111111)//exportsexportsexports.name='Ainmodule2'exports.num=1000exports.sayHi=function(){console.log(`Helloeveryone`)}//module.exports导出方法1module.exports.name='Ainmodule2'module.exports.num=1000module.exports.sayHi=function(){console.log(`Helloeveryone`)}//module.exports导出方法2module.exports={name:'Ainmodule2',num:1000,sayHi:function(){console.log(`Helloeveryone`)}}