22.module的语法

2020-12-24  本文已影响0人  甘草子XS
1.概述

历史上,JavaScript一直没有模块(module)的体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如Ruby的requrire,Python的import,甚至就连css都有@import,但是JavaScript任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大的障碍。

在ES6之前,社区制定了一些模块加载方案,最主要的有CommonJS和AMD两种。前者用于服务器,后者用于浏览器。ES6在语言标准的层面上,实现了模块功能,而且实现的相当简单,可以完全取代CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

ES6模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS和AMD模块,都只能在运行时确定这些东西。比如,CommonJS模块就是对象,输入时必须查找对象属性。

// CommonJS 模块
let { stat , exists , readFile } = require('fs');

// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readFile = _fs.readFile;

上面代码的实质是整体加载fs模块(即加载fs的所有方法),生成一个对象(_fs),然后再从这个对象上面读取3个方法。这种加载成为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没有办法在编译时做“静态优化”。

ES6模块不是对象,而是通过export命令显示指定输出的代码,再通过import命令输入。

上一篇 下一篇

猜你喜欢

热点阅读