美文网首页
模块引入

模块引入

作者: haha2333 | 来源:发表于2019-11-20 17:42 被阅读0次

模块引入是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对编译和执行之后的对象进行缓存

踩坑:
同一个文件中,不要同时是用es6和common.js引入/导出语法。否则报错
Cannot assign to read only property 'exports' of object '#<Object>'
导出最好使用module.exports语法

相关文章

  • gulp-concat js-压缩并合并

    引入 gulp 模块 引入 uglify 压缩 模块 引入 js 合并模块 压缩 并 合并 js文件

  • del 清理模块

    引入 path 路径模块 引入 del 清理模块 清理文件

  • 2.common.js规范

    1.引入模块 require("模块名") 一旦模块被引入,模块内的代码会被执行 2.暴露模块 js文件中引入另外...

  • golang基本用法速查

    Hello World! 引入模块 引入内置模块 引入第三方模块 规则: 默认从 GOPATH 下 src 目录开...

  • 模块引入

    模块引入是node一个重要的知识点导出方式:方式1: 方式二: 引入方式 这两种引入方式有什么区别呢?、 我们已知...

  • 2018-08-13

    模块和包的定义 import 和 from import包和模块的引入import引入一个模块import 模块名...

  • python操作MySQL步骤

    引入模块 在py文件中引入pymysql模块from pymysql import * Connection 对象...

  • 合并已有Android项目到Cordova项目

    基本流程 引入各Module:除主入口app模块外,其他模块通过Android Studio的引入功能引入。 修复...

  • 我的前端模块化

    require.js的使用的步骤 如何定义模块?如何引入模块? ​ 引入插件: script引入定义插件: 用...

  • 2018-08-01与Python交互基础知识

    与Python交互 安装引入模块 安装mysql模块 在文件中引入模块 Connection对象 用于建立与数据库...

网友评论

      本文标题:模块引入

      本文链接:https://www.haomeiwen.com/subject/hgrbictx.html