模块引入

模块引入是node一个重要的知识点
导出方式:
方式1:

module.exports={
    userName:'Jack',
    sayHello:function(){
        return this.userName
    }
}

方式二:

exports.userName= 'Jack'
exports.sayHello=function(){
        return this.userName
    }

引入方式

let userblog = require('./User.js')
console.log(userblog.userName)  //Jack
userblog.sayHello()

这两种引入方式有什么区别呢?、

我们已知,node在编译js文件的时候,都会吧代码包在这里面,这样避免了代码中变量作用域问题

(function (exports,require,module,__filename,__direname)){
  //do something
})

exports:该对象用来将函数的内部局部变量或局部函数暴露到外部
require:用来引入外部变量
module:代表当前模块本身,exports就是模块的属性(即一个变量赋值:exports = module.exports),所以可以使用exports或者module.export导出
__filename:当前模块的完整路经
__direnam:当前模块所在文件夹的完整路径

当我们想要一次性导出一大堆东西出来的时候(应该使用上面方式一的方式)
不能这样子

exports={
  userName:'Jack',
}

这样在另一个文件require出来的东西是{}
因为require出来的东西是是来自引入文件的module.exportsexports={}这个操作切断了exportsmodule.export的联系(因为他们应该指向同一个内存地址)

这个就是第一点区别:exports只能通过点语法,但是module.exports既能通过点语法,也能通过=赋值语法
第二点区别:

module.export可以export构造函数,但是exports不能

function Person(name, sex) {
    this.name = name
    this.sex = sex
}
Person.prototype.say = function () {
    console.log(this.name)
}
exports.Person = Person

//require文件
var person = require(...)
var p = new Person()
//报错,Person is not a constructor
总结!模块导出都用module.exports

模块引入过程

路径分析
文件定位
编译执行

路径分析,即是require(),内部接受一个模块标识符,又可分为

核心模块标识符:类似于这些模块http,fs,path
路径形式的模块标识符,速度仅次于核心模块
非以上两种的其他形式,速度最慢。加载过程逐个尝试模块路径

文件定位:
扩展名分析:js,json,node进行比对,查找确定文件。其过程需要fs模块同步阻塞式判断文件是否存在。所以建议加上文件后缀比较好,尤其是node和json文件

引入后进行缓存
node缓存,不同于浏览器缓存缓存静态脚本,提高加载速度
node对编译和执行之后的对象进行缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值