Node中

导出

向外导出成员,使用module.exports和exports

module.exports = {}

导出多个成员(必须是在对象中)

foo.js

exports.a = 123
exports.b = 'hello'
exports.c = function () {
console.log('ccc')
}
exports.d = {
foo: 'bar'
}

main.js

var fooExports = require('./foo')
console.log(fooExports) //{ a: 123, b: 'hello', c: [Function], d: { foo: 'bar' } }

导出单个成员(拿到的就是:函数、字符串)

foo.js

module.exports = 'hello'

main.js

var fooExports = require('./foo')
console.log(fooExports) //'hello'

以下情况会被覆盖

foo.js

module.exports = 'hello'

//后者会覆盖前者
module.exports = function (x, y) {
return x + y
}

main.js

var fooExports = require('./foo')
console.log(fooExports) //[Function]

也可以这样来导出多个成员

module.exports = {
add: function () {
return x + y
},
str: 'hello'
}

exports与module.exports是相同的

console.log(exports === module.exports)     //true

为什么exports与module.exports两者相同,但是使用 exports = 'foo'  最后得到的还是一个空对象。是因为最后模块的返回值是module.exports而不是exports,所以给exports直接赋值,exports丢失了之前对象的引用关系,指向了另一个字符串,所以最后是拿不到'foo'的

exports与module.exports总结

每个模块中都有一个module对象,module对象中有一个exports对象,我们可以把需要导出的成员都挂载到module.exports接口对象中,也就是module.exports.xxx = xxx的方式,但是每次都这样做很麻烦,所以Node为了方便,同时在每个模块中都提供了一个成员exports,exports === module.exports。所以对于之前的方式可以简写成exports.xxx = xxx。当一个模块需要导出单个成员时,必须使用 module.exports = xxx 的方式,不可使用exports = xxx 。因为每个模块最终向外导出的是module.exports,而exports只是module.exports的一个引用,所以即便为exports = xx 重新赋值,并不能影响module.exports 。但是有一种赋值方式比较特殊,就是exports = module.exports,这个会重新建立引用关系。

导入

Node中导入模块
const 名称 = require('模块标识符')

require具体加载规则链接

在ES6中

规定了如何导入和导出模块
导入:
import 模块名称 from '模块标识符'
import '标识路径'
导出,使用export default和export暴露

export default

export default向外暴露的成员可以使用任意的变量来接收
//test.js
export default {
name: 'zs',
age: 10
} //main.js
import m1 from './test'
//m1 为一个包含 name 和 age 属性的对象
在一个模块中,只能使用export default向外暴露一次
// test.js
export default {
name: 'zs',
age: 10
} export default {
name: 'xiaoming',
age: 10
} //会报错`Only one default export allowed per module`

export

在一个模块中可以同时使用 export default 和 export 暴露成员
使用 export 向外暴露的成员只能使用 {} 接收,这种情况叫做 按需导出
// test.js
export default {
name: 'zs',
age: 10
} export var title = "小星星"
//这样使用不会报错 //main.js
import m1, { title } from './test'
一个模块中可以同时使用多个 export
//test.js
export var title = "小星星"
export var content = '哈哈哈' // main.js
import { title,content } from './test'
如果想在引用时改变名称,可以通过 as
import { title as title123,content } from './test'
注意成套使用

export default和export的使用方法的更多相关文章

  1. ES6:export default 和 export 区别

    export default 和 export 区别: 1.export与export default均可用于导出常量.函数.文件.模块等 2.你可以在其它文件或模块中通过import+(常量 | 函 ...

  2. export default与export的区别

    1.export default 和export都可以用于导出常量,函数,文件,模块等: 2.可以在模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使 ...

  3. export default 和 export的使用方式

    注意:1.export default 向外暴露的成员,可以使用任意的变量来接收 2.在一个模块中 ; export default 只允许向外暴露一次 3.在一个模块中 ; 可以同时使用 expor ...

  4. export default 和 export 的使用方式(六)

    一:ES6 的导入模块方式和暴露对象方式: ES6 中导入模块使用:import 模块名称 from '模块标识符':import '表示路径': 在 ES6 中使用 export default 和 ...

  5. ES6 export default 和 export 的区别

    export default 和 export 区别: 1.export与export default均可用于导出常量.函数.文件.模块等 2.你可以在其它文件或模块中通过import+(常量 | 函 ...

  6. module.exports,exports和export default,export的区别

    前提:CommonJS模块规范和ES6模块规范是完全不同的两个概念. module.exports,exports属于CommonJS模块规范: export default,export属于ES6模 ...

  7. ES6中export default与export的区别

    1.export default 和export都可以用于导出常量,函数,文件,模块等: 2.可以在模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使 ...

  8. export default和export的使用

    export default和export都是用来向外暴露成员 export default 向外暴露的成员可以使用任意的变量来接收,在一个模块中,export default只允许向外暴露一次,可以 ...

  9. export default 和 export 的主要区别

    export default 和 export 的主要区别 在于对应的import的区别:export 对应的 import 需要知道 export抛出的变量名或函数名 import{a,b}expo ...

随机推荐

  1. CentOS 使用yum安装 pip

    pip这个功能很不错,可以用来下载很多东西. 笔者使用的是CentOS Linux release 7.2.1511 (Core)这个版本. 查询版本的语句: cat /etc/redhat-rele ...

  2. GitHub注册与Git安装

    注册GitHub GitHub官网 ☞☞☞☞[戳我] 一.打开,如下图所示, 按照要求进行注册. 安装Git Git官网下载☞☞☞☞ [戳我] 一.打开,根据自己的电脑系统选择不同的版本,这里主要是以 ...

  3. LintCode 433. 岛屿的个数(Number of Islands)

    LintCode 433. 岛屿的个数(Number of Islands) 代码: class Solution: """ @param grid: a boolean ...

  4. Codeforces_731_A

    http://codeforces.com/problemset/problem/731/A 每次操作总共4种情况,判断一下就好了. #include<iostream> #include ...

  5. HDU4192 Guess the Numbers(表达式计算、栈)

    题意: 给你一个带括号.加减.乘的表达式,和n个数$(n\leq 5)$,问你带入这几个数可不可能等于n 思路: 先处理表达式:先将中缀式转化为逆波兰表达式 转换过程需要用到栈,具体过程如下:1)如果 ...

  6. Java1变量数据类型和运算符

    day02_变量数据类型和运算符   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class jh_01_数据类型说明 {     public  ...

  7. requests的post提交form-data; boundary=????

    提交这种用boundary分隔的表单数据时,有两种方法,一种是以传入files参数,另一种是传入data参数,data参数需要自己用boundary来分隔为指定的形式,而files参数则以元组的形式传 ...

  8. 机器学习(ML)十之CNN

    CNN-二维卷积层 卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络.卷积神经网络均使用最常见的二维卷积层.它有 ...

  9. num08---原型模式

    关键点,实现 Cloneable  接口, 重写clone() 方法.克隆出的对象属性保持一致. 案例: 原型模式在spring 源码中的应用: =========================== ...

  10. Go Module下使用本地包

    介绍两种方式: 方式一(推荐): 严格的说,方式一是使用项目目录下的go文件. 项目目录如下: |── studyModule //项目主目录 | |──log //主目录下文件夹 | | |──lo ...