JavaScript 程序本来很小——在早期,它们大多被用来执行独立的脚本任务,在你的 web 页面需要的地方提供一定交互,所以一般不需要多大的脚本。过了几年,我们现在有了运行大量 JavaScript 脚本的复杂程序,还有一些被用在其他环境。
近年来,考虑提供一种将Javascript程序拆分为可按需导入的单独模块的机制。在ES6.0之前有很多Javascript库和框架已经开始了模块的使用如:CommonJS和基于AMD的其他模块系统如RquireJS以及最新的Webpack和Babel。最新的浏览器也支持原始模块功能。
在ES6模块中自动采用严格模式。规定如下:
export语法声明用于导出函数,对象,指定文件的原始值。
export有两种模块导出方式:命名导出与默认导出,命名式导出每个模块可以多个,而默认导出每个模块仅一个。
export var a=123
export const b='abc'
export let c='export demo'
var a=123
const b = 'goyeer'
let c='goyeer export demo'
export {a,b,c}
函数的导出与变量导出类似也需要添加export{函数名}
var add=function(a,b){
return a+b
}
export {a}
面向对象语言中一切皆对象,所以对象是一种数据类型,export也可以完成对象导出。对象的导出一般有两种写法,下面演示对象的导出:
export default{
trueName:'李磊',
engName:'tom',
age:19
}
//导入obj.js类
//import obj from './obj.js'
//console.log(obj)
var person = {
firstName:"Bill",
lastName:"Gates",
age:62,
eyeColor:"blue"
}
export default person
类的导出与对象的导出类似,都是利用export default关键字,同样有两种写法:
// person.js
export default class Person{
firstName = 'Bill'
lastName = 'Gates'
age = 62
eyeColor = 'blue'
show(){
console.log(this.firstName)
}
}
类的导入
import Person from './person.js'
let person = new Person()
person.show()
class Person{
firstName = 'Bill'
lastName = 'Gates'
age = 62
eyeColor = 'blue'
show(){
console.log(this.firstName)
}
}
//导出类
export default Person
导入类
import person from './person.js'
let person=new Person()
person.show()
import语法用于从已导出的模块,脚本中导入函数、对象、指定文件(或模块)的原始值。
import模块导入与export模块导出功能相对应,也存在两种模块导入方式:命名式导入或默认式导入。
import的语法更require不同,而且import必须放在文件的最开始,且前面不允许有其他逻辑代码,这和其他高级语言风格一致。
//导入module01的所有接口、类并制定模块名称为module01
import * as module01 from './modules/module01.js'
//使用时,需要通过新的模块module01,来访问导入文件中的成员
module01.show()
// 导入单个接口
import {myExport} from '/modules/my-module.js';
// 导入多个接口
import {foo, bar} from '/modules/my-module.js';
// 导入接口,并制定别名,编码时更容易使用
import {fun01 as funName} from '/modules/my-module.js';
// 导入默认接口
import myDefault from '/modules/my-module.js';
// 导入默认接口,也可以和其他导入方式一起使用
import myDefault, * as myModule from '/modules/my-module.js';
import myDefault, {foo, bar} from '/modules/my-module.js';
静态导入在页面加载时就会被导入,有时模块太大且不会在页面加载时使用,可以使用动态导入,在需要用的时候在导入模块。
// 方法一:
import('/modules/my-module.js')
.then((module) => {
// Do something with the module.
});
// 方法二:
let module = await import('/modules/my-module.js');
// 方法三:动态导入默认接口
(async () => {
if (somethingIsTrue) {
const { default: myDefault, foo, bar } = await import('/modules/my-module.js');
}
})();
import标准用法是静态模块的导入,会使用所有被导入的模块,在加载时被编译(做不到按需编译,降低页面首次加载的速度)。在一些场景中,可以根据条件导入模块或者按需导入模块,此时可以使用import的动态导入功能替代静态导入。动态导入应用场景有如下场景:
请不要滥用动态导入(只有在必要情况下采用),静态框架能更好的初始化依赖,而且更有利于静态分析工具发挥作用。
整个模块仅为副作用(中性词,无贬义含义)而导入,而不导入模块中的任何内容(接口)。这将运行模块中的全局代码,但实际上不导入任何值。
import "/modules/my-module.js";
https://blog.csdn.net/u014724048/article/details/128938477
import - JavaScript | MDN (mozilla.org)