Node 中的模块的分类
node由三部分组成:ECMAScript + 核心模块 + 第三方模块
核心模块
官方发现一些功能模块使用非常频繁,所以官方把这些模块,编译成了二进制可执行文件,打包到了Node的安装包中;这些核心模块就已经随着安装Node时候,被安装到了本地;
如何使用核心模块 使用require('核心模块的名称');
第三方模块
第三方模块:除了官方提供的好用的核心模块之外,我们程序员发现,还有一些使用也很频繁的代码和方法,一些牛逼的团体、个人、公司,开发出了好用的模块,通过NPM官网,托管出去,供其他人下载使用的这些模块;
统称为第三方模块;我们在开发的过程中,经常需要使用到各种各样的第三方模块
使用方式:下载安装 >> 引入 >> 使用
用户模块
由于业务的需要,程序员自己定义的完成某些特定功能的JS文件,统统称为用户模块!
它的引入也是使用require()
使用方式:创建 >> 引入 >> 使用
第三方模块的使用
先使用npm下载这个模块!【注意:在安装第三方模块的时候,安装的名字,就是你在require时候导入的名字】
使用require导入这个第三方模块!
通过官方文档,试着去使用这个第三方模块!
注意:无论是核心模块、还是第三方模块,都是通过 require来引用这个模块的!
一个简单的第三方模块使用的案例
1 // 这个文件演示一下如果使用第三方模块moment实现日期数据的格式化处理2 // 1. 引入moment(引入之前确保这个模块已经正确的下载哦)3 const moment = require('moment')4 5 // 2.定义一个日期,现在日期值是未格式化的日期数据6 let timeNow = new Date()7 8 // 3.调用moment实现对日期数据的格式化处理9 console.log(moment(timeNow).format('YYYY-MM-DD HH:mm:ss'))
导出用户模块中的成员
exports
- 它是一个对象,我们可以在这个对象上挂载你想暴露的成员
- 使用.语法在exports上挂载成员
- 使用自定义模块举例:
// 我们所创建的js文件就可以认为是一个自定义模块var obj = { name:'jack', age:20}function sayHi(){ console.log('我的名字叫:'+obj.name+",我的年龄是:"+obj.age)}// 在模块中有一个默认的对象exports,这个对象在在这个模块被引入的时候会自动的返回// 我们导出成员的方式就是在这个对象上挂载你想暴露的成员exports.sayHi = sayHiexports.aa = obj
使用自定义模块:
// 如何使用用户自定义模块:// 所有模块想使用都要先引入// 如果引入一个模块,那么这个模块默认会返回一个对象var umodule = require('模块文件的路径')umodule.sayHi()
module.exports
- 它是一个对象,我们可以在这个对象上挂载你想暴露的成员
- 使用.语法在module.exports上挂载成员
- 也可以将module.exports重置为一个新的对象,对象中就包含你想暴露的成员 ,只要引入这个模块成员就会自动暴露
// 引入一个模块,还会自动的暴露这个模块的module.exports对象module.exports = { name: 'rose', say: function () { console.log(this.name) }}
1.定义用户模块
// 我们所创建的js文件就可以认为是一个自定义模块var obj = { name:'jack', age:20}function sayHi(){ console.log('我的名字叫:'+obj.name+",我的年龄是:"+obj.age)}// 在模块中有一个默认的对象module.exports,这个对象在这个模块被引入的时候会自动的返回// 我们暴露成员的方式就是在这个对象上挂载你想暴露的成员// module.exports.sayHi = sayHi// module.exports.aa = obj// 也可以直接使用你想暴露的成员覆盖module.exportsmodule.exports = sayHi
exports 和 module.exports 的区别
通过 module.exports 可以使用 . 语法的形式追加属性,也可以使用 = 直接赋值的形式导出成员;
exports 只能通过 . 的形式追加属性;不能使用 = 直接赋值的形式!
注意: 在一个 module 中,最终向外暴露的成员,以 module.exports 指向的对象为准!
在一个模块中,不要混合使用
module.exports
和exports
- 如果使用点语法,没有区别
- 如果使用重置对象,只能使用module.exprts
使用原则
能使用module.exports就不要使用exports
如果模块中只有一个成员需要暴露,就直接赋值给你想暴露的成员
如果有多成员需要暴露,就写在module.exports的对象中
模块查找(加载)规则
优先从缓存中加载:如果缓存中有这个模块就直接从缓存中加载(不会再去编译指定的模块),如果缓存中没有,就加载模块,同时存储到缓存
加载核心模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载核心模块!
用户自定义模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载用户模块!
用户模块的查找规则:如果不写后缀名,则先严格按照给定的文件名去查找模块并加载执行;按顺序查找文件,找到则不再继续查找index -> index.js -> index.json -> index.node
4. 第三方模块查找规则:
首先,查看项目根目录中有没有
node_modules
文件夹查找
node_modules
文件夹中,有没有和第三方模块名称一致的文件夹在模块对应的文件夹中,查找有没有
package.json
这个文件在
package.json
文件中,查找有没有main
属性如果有
main
属性,并且main
属性指向的路径存在,那么就尝试加载这个路径指定的文件!如果
package.json
文件中,没有main
属性,或者main
属性指向的路径不存在,或者没有package.json
文件, 那么,Node尝试加载 模块根目录中index
相关文件:index.js
->index.json
->index.node
如果在
node_modules
文件夹中,找不到对应的模块文件夹,或者在项目根目录中根本没有node_modules
文件夹,则向上一层文件夹中去查找,查找规则同上!如果上一层目录中也没有查找到,则再向上翻一层去查找,直到找到当前项目所在的盘符根目录为止!
如果找到当前盘符根目录还找不到,则报错:cannot find module
原文转载:http://www.shaoqun.com/a/493345.html
败欧洲网站:https://www.ikjzd.com/w/1555
沃尔玛:https://www.ikjzd.com/w/220
易速:https://www.ikjzd.com/w/2389
Node中的模块的分类node由三部分组成:ECMAScript+核心模块+第三方模块核心模块官方发现一些功能模块使用非常频繁,所以官方把这些模块,编译成了二进制可执行文件,打包到了Node的安装包中;这些核心模块就已经随着安装Node时候,被安装到了本地;如何使用核心模块使用require('核心模块的名称');第三方模块第三方模块:除了官方提供的好用的核心模块之外,我们程序员发现,还有一些使用
mail.ru:mail.ru
网上1号店:网上1号店
2020教师节深圳欢乐谷门票多少钱?教师节深圳欢乐谷票价?:2020教师节深圳欢乐谷门票多少钱?教师节深圳欢乐谷票价?
云南豆沙古镇好玩吗?:云南豆沙古镇好玩吗?
蒙古国的旅游景点和纪念品:蒙古国的旅游景点和纪念品
没有评论:
发表评论