理解ES6的模块(Understanding ES6 Modules)

理解ES6的Modules

原文出处: Understanding ES6 Modules.

基础(Basic)

在ES6中,每个模块的都是定义在它自己的文件中.在模块中定义的变量或者是函数在外部都是不可见的,

除非你显示的使用export来导出它们.
这意味着你可以在你的模块中编写代码, 然后只导出那些需要被其他部分可以访问的部分几个.

ES6模块是使用原生的定义方式进行定义的. 如果想从一个模块中导出某个变量, 只需要使用关键词export.

相似的, 如果想要使用来自另外一个模块中的变量, 可以使用关键词import.

简单模块Demo(Working with a Simple Module)

让我们来创建一个拥有两个功能函数的模块.

1. generateRandom() : 生成一个随机的数字

2. sum(): 将两个数字进行相加.

接下来, 创建文件utility.js :

utility.js

functiongenerateRandom() {
    returnMath.random();
}

function sum(a, b) {
    return a + b;
}

export { generateRandom, sum }

关键词export 导出了这两个函数, 你可以看到, 这两个导出的函数是使用花括号进行包围, 并且他们使用逗号进行隔开.

你也可以使用下面的方式对导出的内容进行重命名.


1

export {generateRandom as random, sum as doSum}

下面我们再来看看如何在其他的模块中是哟了那个这些导出的值.

app.js

import { generateRandom, sum } from'utility';

console.log(generateRandom());//logs a random number
console.log(sum(1, 2));//3

注意第一行. 它将从utility模块中导入值. 当然, 如果你只想导出一个值(例如sum), 你可以使用下面的方式:


1

import { sum } from‘utility‘;

同样, 你也可以将整个模块当作一个对象导入, 然后引用的时候, 使用对象属性的方法. 所以我们可以使用下面的方式:

import 'utility' as utils;

console.log(utils.generateRandom());//logs a random number
console.log(utils.sum(1, 2));//3

很简单是不是? 这其实就是ES6的"命名导入". 接下来, 我们来看看如何使用默认导出.

"默认导出"和"重导出"(Default Exports and Re-exporting)

如果你只想从一个模块中导出一个值, 可以使用默认导出. 为了演示默认导出的用法, 我们需要修改utility.js

utility.js

var utils = {
  generateRandom:function() {
    return Math.random();
  },
  sum:function(a, b) {
    return a + b;
  }
};

export default utils;

最后一行将utils 这个变量进行导出. 而在另外一个模块中, 引用方法如下:

app.js

import utils from'utility';

console.log(utils.generateRandom());//logs a random number
console.log(utils.sum(1, 2));//3
export default utils; //exports the imported value

第一行代码首先将utils对象进行导入, 你也可以同样可以将其重新导出.如最后一行.

以上这些就是ES6 Modules 的大致介绍. 接下来,我们来看一下如何将ES6的模块转变为ES5, 并且可以运行并且测试.

使用ES6模块转换器.(Using the ES6 Module Transpile)

ES6模块转换器是一个可以将你的ES6代码转换成CommonJS 或者AMD 风格的ES5代码

你可以使用下面的命令进行安装.


1

npm install -g es6-module-transpile

在转换之前, 我们先来看看代码的结构. 源码可以去github上面下载

下载地址: Source Code


1

2

3

4

5

es6-modules

    scripts/

        app.js

        utility.js

    out/

scripts 文件夹是我们模块的代码, 我们将编译这部分的代码并且放置到out目录中.

进入es6-modules 目录, 运行命令.

compile-modules convert -I scripts -o out app.js utility.js --format commonjs

时间: 2024-12-20 02:30:51

理解ES6的模块(Understanding ES6 Modules)的相关文章

ES6 的模块系统

此文为翻译,原文地址在这儿:https://hacks.mozilla.org/2015/08/es6-in-depth-modules/[转] ES6 是 ECMAScript 第 6 版本的简称,这是新一代的 JavaScript 的标准.ES6 in Depth 是关于 ES6 的一系列新特性的介绍. 遥想 2007 年,笔者开始在 Mozilla 的 JavaScript 团队工作的时候,那个时候典型的 JavaScript 程序只有一行代码. 两年之后, Google Map 被发布.

(转)关于ES6的 模块功能 Module 中export import的用法和注意之处

关于ES6的 模块功能 Module 中export import的用法和注意之处 export default 的用法 export default命令用于指定模块的默认输出.显然,一个模块只能有一个默认输出,因此export deault命令只能使用一次.所以,import命令后面才不用加大括号,相反其它的export 输出 可以有多个,且import时必须加大括号,示例如下: 1 // modules.js 2 function add(x, y) { 3 return x * y; 4

commonjs模块和es6模块的区别?

commonjs模块和es6模块最主要的区别:commonjs模块是拷贝,es6模块是引用,但理解这些,先得理解对象复制的问题,在回过头来理解这两模块的区别. 一.基本数据类型的模块 ./a1.js es6模块 export var a1 = 1; setTimeout(() => a1 = 2, 500); ./a2.js commojs模块 var a2 = 2; module.exports = a2; setTimeout(() => a2 = 3 ,500); ./index.js

[F2016061803] ES6的模块导入与变量解构的注意事项

在ES6中变量解构是这样的: const a = { b: 1 } const { b } = a 我们可以直接用解构赋值来获得对象的同名属性,这等效于: const b = a.b 除了变量的解构赋值,ES6的模块导入也提供了相似的语法: import { resolve } from 'path' 如果使用webpack构建项目的话,注意这里的解构与普通变量的解构是有所区别的,比如在a.js里有以下代码: export default { b: 1 } 如果按照普通变量的解构法则来导入这个包

ES6入门一:ES6简介及Babel转码器

ES6简介 Babel转码器 Nodejs中使用ES6 WebPack中使用ES6及Babel转码插件 一.ES6简介与转码  1.1一个常见的问题,ECMAScript和JavaScript到底是什么关系? 1996年11月,JavaScript的创造者——Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望JavaScript这种语言能够成为国际标准. 1997年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言

ES6的模块、构建工具及应用的发布

作者:寸志链接:https://zhuanlan.zhihu.com/p/19569085来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 总的说来就是按照将来的标准书写,现在使用工具来适配. 我们已经有了服务端的依赖管理方案 安装并声明依赖: 在代码中获取(require)依赖: 将通用的代码打包并发布到同一个地方.(npm.gems等等) 浏览器端的依赖管理远远没有完成,并且现在情况看上去很糟糕 有各种各样的模块规范: 有很多包管理工具: 通用的代码被打包,到处

ES6 module模块

模块Module  模块Module:一个模块,就是一个对其他模块暴露自己的属性或者方法的文件. 在这里,我们会把module-A.js和module-B.js分别当作两个模块(moduleA模块和moduleB模块)来对待和处理.用这两个模块来演示如何暴露一个模块的属性或方法. 导出Export 导出Export:作为一个模块,它可以选择性地给其他模块暴露(提供)自己的属性和方法,供其他模块使用. 导入Import 导入Import:作为一个模块,可以根据需要,引入其他模块的提供的属性或者方法

Es6中模块引入的相关内容

注意:AMD规范和commonJS规范 1.相同点:都是为了模块化. 2.不同点:AMD规范则是非同步加载模块,允许指定回调函数.CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作. 1,node环境(commonJS规范) 引入:const obj = require("url") 导出:module.exports={} 留心:CommonJS规范---是通过module.exports定义的,在前端浏览器里面并不支持module.exports,通过

node和ES6的模块导出与导入

node的导出与导入 1.node的导出语法 var path = {} module.exports = path 2.node的导入语法 const path = require('path') ES6的导出与导入 1.ES6的导出语法 export default  {}  (只能暴漏一个成员) export var s = {} export var b = {}  (可以暴漏多个成员) 2.ES6的导入语法 import a from '包名(或者是文件路径)'   (导入export