什么是模块化
模块化是指将独立的功能代码封装成一个独立的文件,其他模块需要使用,在进行引用。模块化可以方便代码复用、维护方便以及防止命名冲突;
ES6模块化
ES6模块功能主要由两个命令构成:
export
和import
。export
命令用于规定模块的对外接口,import
命令用于输入其他模块提供的功能。
使用方法
使用 webpack ,webpack 是支持 es6 模块化的,所以就只要引用 babel-loader ,对 es6 的语法做处理即可;babel是一个JS编译器,能把ES比较新的语法转化成浏览器能识别的ES5语法
export defalut、export 与 module.exports 有什么区别?
都是用于向外部暴露数据的命令。 export defalut 与 export 是 ES6 Module 中对外暴露数据的。 export defalut 是向外部默认暴露数据,使用时 import 引入时需要为该模块指定一个任意名称,import 后不可以使用{}; export 是单个暴露数据或方法,利用 import{}来引入,并且{}内名称与 export 一一对应,{}也可以使用 as 为某个数据或方法指定新的名称; module.exports 是 CommonJS 的一个 exports 变量,提供对外的接口
ES6 模块规范和 commonjs 规范 运行机制的区别
CommonJS 模块是运行时加载,ES6 模块是编译时输出接口
运行时加载: CommonJS 模块就是对象;即在输入时是先加载整个模块,生成一个对象,然后再从这个对象上面读取方法,这种加载称为“运行时加载”。
编译时加载: ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,import时采用静态命令的形式。即在import时可以指定加载某个输出值,而不是加载整个模块,这种加载称为“编译时加载”。
CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。