module、export、require、import的使用
module
每个文件就是一个模块。文件内定义的变量、函数等等都是在自己的作用域内,都是自身所私有的,对其它文件不可见。
每个文件内部都有一个module
对象,它包含以下属性
id
: 模块的识别符,通常是带有绝对路径的模块文件名filename
:模块的文件名,带有绝对路径loaded
:返回一个布尔值,表示模块是否已经完成加载parent
:返回一个对象,表示调用该模块的模块children
:返回一个数组,表示该模块要用到的其他模块exports
:表示模块对外输出的值
module.exports
在module
中有一个属性exports
,即:module.exports
。它是该模块对外的输出值,是一个对象。其它模块在加载该模块时,实际上加载到的数据都是由它提供的。
module.exports
输出的可以是一个对象,也可以是一个函数。在引用该模块的文件内,如果接受到的是对象,可以直接访问其中的属性,如果接受到的是一个函数,也可以直接执行。
exports
exports
是一个特殊的存在,它是对module.exports
的指向,可以通过向exports
对象中添加变量、方法等,但是不能直接将exports
指向一个值,这样会切断exports
和module.exports
之间的联系。
export
和module.exports
的使用有一点需要注意,如果导出的是一个函数,只能使用module.exports
。
export
export
用于规定模块的对外接口,可以输出变量、函数或类。export
规定的对外接口必须与模块内部的变量建立一一对应关系。
- 错误写法
// 方式一
export 1; // 报错
// 方式二
var a = 1;
export a; // 报错
// 方式三
function fn() {}
export fn; // 报错
- 正确写法
// 方式一
export var a = 1;
// 方式二
var a = 1;
export {a};
// 方式三
var a = 1;
export {a as a1}; // 对a重命名输出
// 方式四
export function fn() {};
// 方式五
function fn() {}
export {fn};
export default
export default
和export
的区别:
- 使用
export
时,输出的内容和接收时用的变量名称必须一致,否则无法加载;使用export default
,则为模块指定默认输出,同时,可以为接收到的变量指定其它名称 - 使用
export
输出的变量或者函数,在import
时,需要使用大括号;使用export default
则不用
import
import
和export
配对使用,用于加载接收export
输入的内容
require
require
用于加载模块文件,默认加载的文件后缀名为.js
- 如果加载的文件路径以
/
开头,则表示加载的是一个绝对路径 - 如果加载的文件路径以
./
或../
开头,则表示加载的是一个相对当前位置的路径 - 如果加载的文件路径不以以上内容开头,则加载的是一个核心模块,默认会到
node_modules
下寻找
小结
module
、module.exports
、exports
采用的是CommonJS模块规范。export
和export default
采用的是ES6模块规范。
module.exports
输出的是值的拷贝;export
是值的引用module.exports
在运行时加载;export
是在编译时输出
// addA.js
var a = 1;
function addA() {
a++;
}
module.exports = {
a: a,
addA: addA
};
// use addA
var addA = require('./addA.js');
console.log(addA.a); // 1
addA.addA();
console.log(addA.a); // 1
/************ 改善后 *********************/
// addA.js
var a = 1;
function addA() {
a++;
}
module.exports = {
get a() {
return a;
},
addA: addA
};
// addA.js
export.a = 1;
export.addA = function() {
a++;
}
// use addA
import {a, addA} from './addA';
console.log(a);// 1
addA();
console.log(a);// 2
参考
module、export、require、import的使用的更多相关文章
- ES6 模块化(Module)export和import详解 export default
ES6 模块化(Module)export和import详解 - CSDN博客 https://blog.csdn.net/pcaxb/article/details/53670097 微信小程序笔记 ...
- ES6 Module export与import复合使用
export与import复合使用 基本语法 export {...} from '文件'; 等价于 import {...} from "文件": export {...} 先加 ...
- module.exports,exports,export和export default,import与require区别与联系【原创】
还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...
- module.exports,exports,export和export default,import与require区别与联系
还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...
- export,export default,module.exports,import,require之间的区别和关联
module.exports Node 应用由模块组成,采用 CommonJS 模块规范.根据这个规范,每个文件就是一个模块,有自己的作用域.在这些文件里面定义的变量.函数.类,都是私有的,对外不可见 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- ES6学习笔记(十九)Module 的语法-export和import
1.概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的require.Pyt ...
- 探索 模块打包 exports和require 与 export和import 的用法和区别
菜单快捷导航: CommonJS 之 exports和require用法 ES6 Module 之 export 和 import 用法 CommonJS和ES6 Module的区别 循环依赖 和 解 ...
- export和import实现模块化
export和import实现模块化 阅读目录 ES6的模块化的基本规则或特点: 下面列出几种import和export的基本语法: ES6导入的模块都是属于引用: 循环依赖的问题: 浏览器兼容: 参 ...
- export、export default、module.export区别
在es6里面定义模块,导出模块时可以使用export.export default 这2者区别: 在同一个文件里面可以有多个export, 一个文件里面只能有1个export default //a. ...
随机推荐
- Struts2-在js中使用struts2标签
1, 支行是下拉列表,自助银行也是下拉列表,它们是级联关系; <tr> <th width="17%"><span>*</span> ...
- Spring配置文件的命名空间URI
Spring配置文件介绍 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=" ...
- net core 安装web模板
---恢复内容开始--- 今天想试试在Linux用C#开发WebAPI,查了下,要用: dotnet new -t Web 来建立工程,结果我试了下,出来这段: Invalid input switc ...
- CentOs下,配置tomcat支持https
网上此类教程一大堆,本文主要记录步骤和几个注意点. 首先,我们使用jdk的keytool生成证书.命令如下: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: ...
- 利用ASP.NET操作IIS (可以制作安装程序)
很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很 ...
- 这是一名Java学者关于学习方向的建议
无可厚非,编程是一门艺术.但是辉煌的背后必须是一段辛苦的奋斗过程,而过程的引导方向就是最重要的一环.Java语言可谓是引领了编程的潮流,你会是怎样去学的呢? 这是一名Java学者的学习方向的建议 注: ...
- css常用属性2
1 浮动和清除浮动 在上篇的第十一节--定位中说道: CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 普通流和绝对定位已经说完,接下来就是浮动了. 什么是浮动? CSS 的 Float(浮动 ...
- MySQL所学所思所想
MySQL更改线上配置方案思想:原则上,需要备机.备份工作准备到位,有参数调优配置方案.有配置回退方案.有应急切换备机方案.以上方案评审无问题,然后可以和客户约定实施的时间.服务中断时间,先向客户侧申 ...
- Highway Networks Pytorch
导读 本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现了Highway Networks. 一 .Highway ...
- 移植u-boot-2012.04.01到JZ2440
开发环境:Ubuntu 12.04 开发板:JZ2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc-4.3.2 u-boot:u-boot-2012 ...