ES6 import & export

Node背景介绍

Node是一个js文件的执行环境(类似于java的jvm),所以可以执行任何js文件。在命令行输入:node yourJSFileName.js 即可,执行js文件中的内容。

模块化module

node.js模块化系统中,每一个js文件都被看做是一个模块module。在实际操作中,node既然可以执行js文件,肯定一个文件解决的问题有限(不方便维护)。所以,js文件可以引用其他js文件。详细参考官方说明文档: https://nodejs.org/api/modules.html

import && export

import & export 属于ES6用法:

  1. Node 9 (?)之前不支持import & export,只能用require && module.exports
  2. jest测试框架目前不支持ES6

以上情况都需要使用babel对ES6的模块输出进行处理,将所有输出都赋值给exports,并带上一个标志_esModule标明这个是由es6转化来的ES5的commonjs输出,再进行编译运行。

babel将模块的导出转换为commonjs规范后,也会将引入 import 也转换为 commonjs 规范。即采用 require 去引用模块,再加以一定的处理,符合es6的使用意图。

import export语法

import defaultExport from "module-name";   // 针对 export default defaltExport 的情况
import { export } from "module-name";   // 针对 export export的情况
import { export as alias } from "module-name";   // 针对 export export的情况,且指定了引用名,在该文件内可使用引用名进行使用
import { export1 , export2 } from "module-name";  //从同一module中引用多个常量、函数、文件、模块等
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";

export & import 的对象可以是常量、函数、对象、文件、模块等

defaultExport
导入模块的默认导出接口的引用名,一个文件只能有一个export defalt,其他文件import时不需要加{}
**注意:export default const a = 12这种写法是会报错的,default后直接跟要导出的内容,如

export default new ApolloClient();

module-name
要导入的模块。通常是包含目标模块的.js文件的相对或绝对路径名,可以不包括.js扩展名。某些特定的打包工具可能允许或需要使用扩展或依赖文件,它会检查比对你的运行环境。只允许单引号和双引号的字符串。

name
导入模块对象整体的别名,在引用导入模块时,它将作为一个命名空间来使用。

export, exportN
被导入模块的导出接口的名称。

alias, aliasN
将import的对象(常量、模块、函数、文件等)在导入的文件中重命名(因为导出的模块必须与导入的模块命名一致,通过重命名可以避免当前程序中有与之相同的同名对象,在导入文件中可以使用该名称进行调用。
如:

import { bark as dogBark } from ../helper/animal
// 在该文件使用时,可以如下使用
const sound = dogBark.sound   
alias重命名导入接口

使用举例

export.png

export default.png

你可能感兴趣的:(ES6 import & export)