2019-07-19 ES6中import几种导入方式的区别

1.前言

在项目中遇到将单个的函数抽出在多个js文件中使用,对于其import几种方式及区别进行了学习。

如下为在项目中常见的几种导入方式:

import React from 'react';

import 'echarts/lib/chart/line';

import { Select, Menu, Breadcrumb, Icon, Popover }from 'antd';

import *as actionfrom '../../actions/OptionAction';

import {injectIntl }from 'react-intl';

import ClassNames from 'classnames';

import './fitterInformationAll.less';

2.import概念

ES6模块主要有两个功能:export和import

export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口

import用于在一个模块中加载另一个含有export接口的模块。

也就是说使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。

// main.js

var name="Tom";

var fun=function(value){

console.log(value)

}

export {name,fun}

//通过向大括号中添加name,fun变量并且export输出,就可以将对应变量值以name、fun变量标识符形式暴露给其他文件而被读取到

// child.js

// 通过import获取main.js文件的内部变量,{}括号内的变量来自于main.js文件export出的变量标识符。

import {name,fun} from "./main.js"

console.log(name) // Tom

前面的例子可以看出,main.js使用import命令的时候,用户需要知道main.js所暴露出的变量标识符,否则无法加载。可以使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。

3.import常见几种方式及区别

import defaultExportfrom "module-name";

import *as namefrom "module-name";

import {export }from "module-name";

import {export as alias }from "module-name";

import { export1, export2 }from "module-name";

import { foo, bar }from "module-name/path/to/specific/un-exported/file";

import { export1, export2as alias2, [...] } from"module-name";

import defaultExport, {export [, [...] ] } from"module-name";

import defaultExport, *as namefrom "module-name";

import "module-name";

var promise =import("module-name");//这是一个处于第三阶段的提案。

name参数是“导入模块对象”的名称,它将用一种名称空间来引用导入模块的接口。export参数指定单个的命名导出,而import * as name语法导入所有导出接口,即导入模块整体。以下示例阐明该语法。

(1)导入整个模块的内容

这将myModule插入当前作用域,其中包含来自位于/modules/my-module.js文件中导出的所有接口。

import *as myModulefrom '/modules/my-module.js';

(2)导入单个接口

给定一个名为myExport的对象或值,它已经从模块my-module导出(因为整个模块被导出)或显式地导出(使用export语句),将myExport插入当前作用域。

import {myExport}from '/modules/my-module.js';

(3)导入多个接口

这将foo和bar插入当前作用域。

import {foo, bar}from '/modules/my-module.js';

(4)导入带有别名的接口

可以在导入时重命名接口。例如,将shortName插入当前作用域。

import {reallyLongModuleExportNameas shortName}from '/my-module.js';

(5)导入时重命名多个接口

import {

reallyReallyLongModuleMemberNameas shortName,

  anotherLongModuleNameas short

}from '/modules/my-module.js';

(6)仅为副作用而导入一个模块

整个模块仅为副作用(中性词,无贬义含义)而导入,而不导入模块中的任何内容(接口)。 这将运行模块中的全局代码, 但实际上不导入任何值。

import '/modules/my-module.js';

(7)导入默认值

引入模块可能有一个defaultexport(无论它是对象,函数,类等)可用。然后可以使用import语句来导入这样的默认接口。

最简单的用法是直接导入默认值:

import myDefaultfrom '/modules/my-module.js';

也可以同时将default语法与上述用法(命名空间导入或命名导入)一起使用。在这种情况下,default导入必须首先声明。 例如:

import myDefault, *as myModulefrom '/modules/my-module.js';

你可能感兴趣的:(2019-07-19 ES6中import几种导入方式的区别)