节点。js的模块有哪些

  介绍

这篇文章给大家分享的是有关节点。js的模块有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

节点。js的模块

JavaScript做为一门为网页添加交互功能的简单脚本语言问世,在开始并不包含模块系统,随着JavaScript解决问题越来越复杂,把所有代码写在一个文件内,用函数区分功能单元已经不能支撑复杂应用开发了,ES6带来了大部分高级语言都有的类和模块,方便开发者组织代码

进口_ & # 39;lodash& # 39;;      类有趣的{}      出口默认乐趣;

上面三行代码展示了一个模块系统最重要的两个要素导入和导出

    <李>

    <代码> 出口用于规定模块的对外接口

    <李>

    <代码> 用进口于输入其他模块提供的功能

而在ES6之前,社区出现了很多模块加载方案,最主要的有CommonJS和AMD两种,节点。js诞生早于ES6,模块系统使用的是类似CommonJS的实现,遵从几个原则

    <李>

    一个文件是一个模块,文件内的变量作用域都在模块内

    <李>

    使用<代码>模块。出口> <李>

    使用<代码> 需要引入其它模块

<代码>循环。js代码

const{π}=数学;      模块。出口=功能区域(r) {   π* r * * 2;   };

上面代码就实现了节点。js的一个模块,模块没有依赖其它模块、导出了方法<代码> 区域计算圆的面积

<代码>测试。js代码

const面积=要求(& # 39;。/circle.js& # 39;);   控制台。日志(“半径为4的圆的面积是${区域(4)}');

模块依赖了圆。js,使用其对外暴露面积的方法,计算圆的面积

模块。出口

模块对外暴露接口使用module.exports,常见的有两种用法:为其添加属性或赋值到新对象
<代码>测试。js代码

//添加属性   module.exports。prop1=xxx;   module.exports。funA=xxx;   module.exports。funB=xxx;//赋值到全新对象   模块。出口={   prop1,   funA,   funB,   };

两种写法是等价的,使用时候没区别

const mod=要求(& # 39;。/. js # 39;);      console.log (mod.prop1);   console.log (mod.funA ());

还有另外一种直接使用<代码> 出口对象的方法,但是只能对其添加属性,不能赋值到新对象,后面会介绍原因

//正确的写法:添加属性   出口。prop1=xxx;   出口。funA=xxx;   出口。funB=xxx;//赋值到全新对象   模块。出口={   prop1,   funA,   funB,   };

要求(& # 39;id # 39;)

需要用法比较简单,id支持模块名和文件路径两种类型

const fs=要求(& # 39;fs # 39;);   const _=要求(& # 39;lodash& # 39;);

示例中的fs, lodash都是模块名,fs是节点。js内置的核心模块,lodash是通过npm安装到<代码> node_modules>

因为一个项目内可能会包含多个node_modules文件夹(节点。js比较失败的设计),第三方模块查找过程会遵循就近原则逐层上溯(可以在程序中打印<代码>模块。路径> NODE_PATH 环境变量查找到文件系统根目录,具体过程可以参考官方文档

此外,节点。js还会搜索以下的全局目录列表:

    <李> $ HOME/.node_modules李 <李> $ HOME/@罾頽ode_libraries <> $前缀/lib/节点李

其中<代码> $ HOME> $前缀> node_prefix>

模块还可以可以使用文件路径加载,这是项目内自定义模块的通用加载方式,路径可以省略拓展名,会按照. js, . json。节点顺序尝试

    <李>以<代码> & # 39;/& # 39;为前缀的模块是文件的绝对路径,按照系统路径查找模块李 <李>以<代码> & # 39;。/& # 39;为前缀的模块是相对于当前调用要求方法的文件,不受后续模块在哪里被使用到影响李

节点。js的模块有哪些