es6模块化导入导出
模块化指的就是将一个大程序拆分成若干个互相依赖的小文件,然后在用简单的方法拼装起来。
在 ES6 之前,JS没有模块化系统,社区制定了一些模块加载方案
最主要的有 CommonJS(Asynchronous module definition) 和 AMD(common module definition) 两种。前者用于服务器,后者用于浏览器
- /*
- CommonJS(node遵循该规范)
- ->require.js 引入
- ->module.exports 导出
- AMD
- 比如 -> require.js
- CMD
- 比如 -> sea.js
- */
ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量
(CommonJS 模块就是对象,输入时必须查找对象属性)
ES6 模块不是对象,而是通过export
命令显式指定输出的代码,再通过import
命令输入
- //import {fn} from './xx.js'; 引入模块
- //export function fn(){} 导出模块
模块可以理解为函数代码块的功能,是封装对象的属性和方法的javascript代码,它可以是某单个文件,变量或者函数
在Es6模块中,无论有没有加"use strict",都会自动采用严格模式
Es6中模块导入的基本语法
如果想从一个文件(模块)访问另一个文件(模块)的功能,则需要通过import关键字在另一个模块中引入数据
- import {标识符1,标识符2} from "本地模块路径"
导入单个绑定:
- // 只导入一个
- import {sum} from "./example.js"
导入多个绑定:
- // 导入多个
- import {sum,multiply,time} from "./exportExample.js"
导入整个模块:
用星号(*
)指定一个对象,所有输出值都加载在这个对象上面
- // 导入一整个模块
- import * as example from "./exportExample.js"
如果想为输入的变量重新取一个名字,import
命令要使用as
关键字,将输入的变量重命名
- import { lastName as surname } from './profile.js';
Es6中模块导出的基本语法
模块的导出,export关键字用于暴露数据,暴露给其他模块
可以将export放在任何变量,函数或类声明的前面,从而将他们从模块导出
- // profile.js
- export var firstName = 'Michael';
- export var lastName = 'Jackson';
- export var year = 1958;
在export命令后面,使用大括号指定所要输出的一组变量
- // profile.js
- var firstName = 'Michael';
- var lastName = 'Jackson';
- var year = 1958;
- export {firstName, lastName, year};
两种方式是等价的,第二种方式。应该优先考虑使用第二种这种写法(在尾部,一眼看清楚输出了哪些变量)
- //导出函数
- export function sum(num1,num2){
- return num1+num2;
- }
- //导出类
- export class People{
- constructor(name,age){
- this.name = name;
- this.age = age;
- }
- info(){
- return `${this.name}${this.age}`
- }
- }
通常情况下,export
输出的变量就是本来的名字,但是可以使用as
关键字重命名
- function v1() { ... }
- function v2() { ... }
- export {
- v1 as streamV1,
- v2 as streamV2,
- };
export default命令
export default命令用于指定模块的默认输出,一个模块只能有一个默认输出
- /*第一组*/
- export default function crc32() { // 输出
- // ...
- }
- import crc32 from 'crc32'; // 输入
- /*第二组*/
- export function crc32() { // 输出
- // ...
- };
- import {crc32} from 'crc32'; // 输入
第一组使用export default时,对应的import语句不需要使用大括号
第二组是不使用export default时,对应的import语句需要使用大括号
因此export default命令只能使用一次。所以,import命令后面不用加大括号,因为只可能唯一对应export default命令
export default也可以用来输出类
- // MyClass.js
- export default class { ... }
- // main.js
- import MyClass from 'MyClass';
- let o = new MyClass();
export 与 import 的复合写法
如果在一个模块之中,先输入后输出同一个模块,import
语句可以与export
语句写在一起
- export { foo, bar } from 'my_module';
- // 可以简单理解为
- import { foo, bar } from 'my_module';
- export { foo, bar };
es6模块化导入导出的更多相关文章
- ES6之模块化导入导出
1.概述 在js的历史上一直没有模块(module)体系,无法将一个大程序拆分成相互依赖的小文件,再用简单的方法拼装起来,这对开发大型的.复杂的项目形成了巨大障碍. 在 ES6 之前,社区制定了一些模 ...
- ES5与ES6常用语法教程之 ①函数写法、创建对象、导入导出模块方式
函数写法区别 计算a, b两个数字之和,有返回值 es5 写法 function add(a, b) { return a + b; } es6 写法(箭头函数) let add = (a, b) = ...
- ES6 模块导入import 导出export 和module.export
ES6中新增了模块的导入和导出功能 在实际过程中可以使用 import 和 export 对模块进行导入和导出操作,具体如下 1. 名字导入/导出 (导入名字必须与导出的一致,导入时需要用花括号) ...
- ES6详解八:模块(Module)!--各种导入导出方法
[-] 基本用法 命名导出named exports 默认导出 命名导出结合默认导出 仅支持静态导入导出 各种导入和导出方式总结 modules是ES6引入的最重要一个特性. 所以以后再写模块,直 ...
- ES6模块化
关于ES6模块化 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的require ...
- CommonJS、AMD、CMD和ES6模块化区别
本文参考自:https://www.cnblogs.com/chenguangliang/p/5856701.html 1.CommonJS NodeJS是CommonJS规范的实现,webpack ...
- 07 . 前端工程化(ES6模块化和webpack打包)
模块化规范 传统开发模式主要问题 /* 1. 命名冲突 2. 文件依赖 */ 通过模块化解决上述问题 /* 模块化就是把单独的一个功能封装在一个模块(文件)中,模块之间相互隔离, 但是可以通过特定的接 ...
- 用NPOI实现导入导出csv、xls、xlsx数据功能
用NPOI实现导入导出csv.xls.xlsx数据功能 直接上代码 首先定义一个接口 如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...
- commonJS 和 ES6 模块化的不同
commonjs 导出 module.exports={ add:function(){ console.log('add测试') } } 导入 var add=require('./add.js') ...
随机推荐
- [hgoi#2019/3/21]NOIP&NOI赛后总结
前言 今天做的是是2010年提高组和NOI的题目,做过几道原题,但是还是爆炸了,我真的太弱了. t1-乌龟棋 https://www.luogu.org/problemnew/show/P1541 这 ...
- 【dp】P1434 [SHOI2002]滑雪
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- thinkphp5 如何使用查询事件?
它是对数据库的CURD操作事件进行了钩子,当事件触发时,会进行回调. 就像是注册事件和前置方法或后置方法类似 下面是demo <?php namespace app\index\controll ...
- MySQL使用普通用户访问返回ERROR 1698 (28000): Access denied for user 'root'@'localhost'
这个问题最开始查资料都说要改密码,密码不对.其实不是这个样子都. 解决方法 修改/etc/mysql/my.cnf,添加以下内容 [mysqld] skip-grant-tables 重启mysql服 ...
- WinterAndSnowmen
https://vjudge.net/problem/TopCoder-12891 暴力想法是:dp[i][s1][s2]前i个,第一个集合xor是s1,第二个集合xor是s2方案数O(n^3) 有x ...
- C# Winform ListView控件
一.ListView: 1.视图改为为Detalis: 2.编辑列,每添加一个添加一列,右侧属性Text改列名,停靠位置,列头的长度等等: 3.右侧属性,点开Iteme,添加ListViewItem集 ...
- 【听RQY大佬“训话”有感】
今天听了山东省“红太阳”——RQY大佬(dalao获奖传送门)的讲话,做一下总结及感悟: 总结: 1.基础重要!!!.基础重要!!!.基础重要!!!(重要的事情说三遍) 只要基础好了,后面知识都很简单 ...
- JavaScript frame跨域获取元素、修改元素属性、调用其他frame页面方法
今天做了一个frameset的集合页面,其中有多个iframe页面,其中点击frame=leftMenu里的按钮元素后,需要修改frame=Header页面里的一个div元素属性. 1.主页面架构 & ...
- SSH框架调用scrapy爬虫
毕设刚答辩完毕,不用担心查重了,所以补一篇毕设的内容. 毕设是图片搜索网站,使用python爬虫获取图片资源,再由javaweb管理使用图片的信息和图片,大部分实现起来十分简单,也不好意思炫耀.但是有 ...
- python自动化开发-[第十九天]-分页,cookie,session
今日概要: 1.cookie和session 2.csrf 跨站请求伪造 3.自定义分页 一.上节回顾: http请求的本质: - Http请求本质 浏览器(socket客户端): 2. socket ...