node——module.exports
module.exports

1.
在a.js中
var b=require('./b.js');
 console.log(b);
在b.js中
function add(x,y){
    return x+y;
}
var result=add(100,1000);
console.log(result);
执行a.js

当加载一个模块,默认被require()加载后,返回的是一个对象{}
2.
在b.js中
function add(x,y){
    return x+y;
}
var result=add(100,1000);
console.log(result);
//return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
module.exports='hello world!';
执行a.js

给module.exports符什么值,加载b.js模块的时候就会返回什么值
3.
b.js
function add(x,y){
    return x+y;
}
var result=add(100,1000);
console.log(result);
//return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//数字
module.exports=function(x){
    console.log(x);
};
a.js
 var b=require('./b.js');
 console.log(b);
 b('hahaha');
执行a.js

module.exports后面可以符字符串,数值,还有函数
4.
那么我们还可以这样
b.js
function add(x,y){
    return x+y;
}
var result=add(100,1000);
console.log(result);
//return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//数字
/*module.exports=function(x){
    console.log(x);
};*/
module.exports.name='Jim';
module.exports.age=11;
module.exports.show=function(){
    console.log(this.name+this.age);
}
a.js
 var b=require('./b.js');
 console.log(b.name);
  console.log(b.age);
 console.log(b.show);
b.show();
执行a.js

b.js也可以返回出这样的对象
总结:
所以,require用来加载模块,module.exports用来暴露模块
module.export与export的区别
a.js
 var b=require('./b.js');
 console.log(b.name);
  console.log(b.age);
 b.show();
b.js
module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
}
执行a.js

得到的结果与module.export的1结果相同,但是module.export与export之间还是有些差别的,我们来看下面的例子
a.js
var b=require('./b.js');
 console.log(b);
 console.log(b.name);
  console.log(b.age);
 b.show();
 b('hahaha');
b.js
module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
};
module.exports='Hello !';
执行a.js

可以看出最后暴露出的只有module.exports=“Hello !”,而exports的都没有暴露出来
原因:
因为module.exports和exports相当于一个栈里的两个变量,module.exports先指向堆里的一个对象,给对里添加了一个name属性

exports会和module.exports指向同一个对象,添加属性

之后如果又对module.export赋值:module.exports=‘Hello !’;,这个时候module.exports会指向堆里的一个新的地方

exports就没有和module.exports在同一个对象里了,而会返回的值会是module.exports的值,所以exports不会暴露出来
再修改一下b.js
module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
};
exports='Hello !';

可以看出,最终返回的还是module.exports
exports存在因为它是一个快捷方式,是为了我们使用更方便
node——module.exports的更多相关文章
- 探讨ES6的import export default 和CommonJS的require module.exports
		
今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...
 - Node.js中exports与module.exports的区别
		
原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很 ...
 - Node.js exports与module.exports的关系
		
今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...
 - es6 import export 与 node 中的module.exports exports
		
1.export a.export 变量 export var name = 'jack';export var age = 18;//等同于 var name = 'jack';var age = ...
 - Node.js  module.exports和exports的区别
		
require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码: foo.js exports.a = functio ...
 - Node中Exports与module.export的使用与区别
		
最近在看<node开发实战详解>时有写疑问,所以自己就整理了一些资料.下面是node4.*的官方api文档(http://nodejs.cn/doc/node_4/modules.html ...
 - (译)Node.js的模块-exports和module.exports
		
原文标题:Node.js Module – exports vs module.exports 原文链接:http://www.hacksparrow.com/node-js-exports-vs-m ...
 - Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别
		
1.module.exports module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...
 - node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别
		
CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷.它的终极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶 ...
 
随机推荐
- 网络教程(9)ARP。IP和以太网间映射
			
question: how does a knows that SFO is the right place to send as Ethernet frame subnet Mask: its ju ...
 - 利用UNIX时间戳来计算ASP的在线时间
			
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><!DOCTYPE html PUBLIC "-/ ...
 - Fastdfs环境搭建
			
环境准备 使用的系统软件 名称 说明 centos 7.x libfatscommon FastDFS分离出的一些公用函数包 FastDFS FastDFS本体 fastdfs-nginx-modul ...
 - 01.Python基础-4.字符串
			
1 字符串初识 字符串编码 字符串定义:多个字符(双引号或单引号中的数据)组成 字符串下标 类似列表list 格式化 就是占位符 最常用%s %d %f等等 转义字符 转义字符 描述 \ (在行尾时) ...
 - CSS 居中【整合】
			
<center> text-align:center 在父容器里水平居中 inline 文字,或 inline 元素 vertical-align:middle 垂直居中 inline 文 ...
 - Spring学习总结(19)——Spring概念详解
			
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spring是一个分层的JavaSE/EEfull-stack(一 ...
 - RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
			
1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 官网:http://www.rabbitmq. ...
 - jQuery练习总结(一)
			
第一个jQuery程序: 注意:使用jQuery时候定义单击事件使用的方法是click(function(){处理单击事件产生时所要执行的代码}) , 而JavaScript定义的单击事件则是 xx. ...
 - auto-boxing, uboxing,以及缓存问题
			
package chengbaoDemo; public class Test02 { public static void main(String[] args) { Integ ...
 - File System Design Case Studies
			
SRC=http://www.cs.rutgers.edu/~pxk/416/notes/13-fs-studies.html Paul Krzyzanowski April 24, 2014 Int ...