CommonJS和ES6的导入导出

JavaScript的模块的导入导出

模块化的好处:

1、避免命名冲突(减少命名空间污染)

2、更好的分离,按需加载

3、更高复用性

4、高可维护性

模块化规范

CommonJS

每一个JS文件都可以当做一个模块。

在服务器端:模块的加载是同步加载的,即我们需要等待加载模块的时间。

在浏览器端:浏览器是不认识CommonJS语法的,所以我们需要提前编译打包为浏览器认识的语法。

基本语法:

暴露模块:有两种方式:

module.exports=value;

exports.xxx=value;

暴露的模块本质到底是什么?(exports对象)

引入模块:require(xxx)

第三方模块:xxx为模块名

自定义模块:xxx为模块文件路径

代码展示:

module01.js

//暴露模块用 module.exports=value 暴露一个对象
module.exports={
    msg:'info',
    name:'wahaha',
    foo(){
        console.log(this.msg);
    }
};

module02.js

//暴露一个函数 module.exports=function(){}
module.exports=function () {
    console.log('module2')
};

module03.js

//exports.xxx=value
exports.foo=function () {
    console.log('foo()module3')
};
exports.boo=function () {
    console.log('boo()module3')
};
exports.arr=[1,2,33,33,45,34];

app.js

//引入的第三方模块一般放在自定义模块的上面
let uniq=require('uniq');
//将其他的模块汇集到主模块
let module1=require('./modules/module1');
let module2=require('./modules/module2');
let module3=require('./modules/module3');
//使用各个模块之前,先弄清楚该模块导出的究竟是什么
module1.foo();
module2();
module3.boo();
console.log(module3.arr);
console.log(uniq(module3.arr));

注意:

module.exports的形式其实就是对exports对象的一个重写,会覆盖掉原理的exports对象。

exports.xxx的形式就是早给exports进行添加新的属性和方法。

以上CommonJS的两种导出方式,最终导出的都是exports对象

ES6的模块(很火)

依赖模块需要编译打包处理。(ES6==》ES5)

导出模块:export

导入模块:import

浏览器端的实现:

使用Babel将ES6编译为ES5代码;

使用Browserify编译打包js.

ES6模块的导出分为常规导出(分别导出和统一导出)和默认导出。

对于这两种不同的导入方式,我们分别应该要采取不同的导入语法。

module01.js

//暴露模块 分别暴露
export function fun() {
    console.log('fun()+module1')
}

export function boo() {
    console.log('boo()+module1')
}

export let arr=[1,2,3,4];

module02.js

//统一暴露
function fun2() {
    console.log('fun1()+module2')
}

function boo2() {
    console.log('boo2()+module2')
}

let arr2=[2,4,5,7];

export {fun2,boo2,arr2}

module03.js

//默认暴露  可以暴露 任意数据类型 ,暴露什么数据接收到的就是什么数据
//export default value
// export default ()=>{
//     console.log('我是默认暴露的箭头函数')
// }
//这个时候暴露出去的就是一个函数,我们可以进行直接调用
//默认暴露,就是我暴露什么,导入的时候就可以接收什么
//在一个文件中,默认暴露只能暴露一次
export default {
    msg:'默认暴露',
    fun(){
        console.log(this.msg);
    }
}

main.js

//ES6引入第三方库
import $ from 'jquery'
//引入其他的模块
//语法: import xxx from '路径'

//对于ES6的export的分别暴露和统一暴露,这两种暴露方式也叫做常规暴露,我们需要使用解构赋值的方式进行导入
//你想要什么需要点名道姓的跟我要才行,这里必须使用结构赋值对常规导出进行导入
import {fun,boo,arr} from './module1'
import {fun2,boo2,arr2} from './module2'
//这个是对默认导出的导入,导入的就是导出的数据类型
import module3 from './module3'
fun();
boo();
console.log(arr);
fun2();
boo2();
console.log(arr2);

console.log(module3);
module3.fun();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我将根据您的要求回答您的问题。现在让我们来看一些关于 CommonJSES6 的面试题。 1. 什么是 CommonJSES6CommonJS 是一种模块化规范,用于在服务器端和客户端 JavaScript 应用程序中定义模块。它定义了模块的导入导出规则,使得模块可以在应用程序中重用。ES6(ECMAScript 2015)是 JavaScript 的一个版本,它引入了很多新的语言特性和功能,包括模块化机制。 2. CommonJSES6 模块化规范之间有什么区别? CommonJS 是一种同步加载模块的规范,而 ES6 则是一种异步加载模块的规范。在 CommonJS 中,模块的导入导出是通过 require() 和 module.exports 或 exports 来实现的,而在 ES6 中则是通过 import 和 export 语句来实现的。此外,ES6 还支持静态分析,这意味着编译器可以在编译时确定哪些模块将被导入导出,以及它们的依赖关系。 3. ES6 的模块化规范有哪些优点? ES6 的模块化规范具有以下优点: - 易于维护和调试:ES6 模块化的导入导出语句更加清晰和简洁,使得代码更易于维护和调试。 - 静态分析:ES6 模块化规范可以在编译时进行静态分析,这使得编译器可以优化代码并检测潜在的错误。 - 更好的命名空间管理:ES6 模块化规范通过使用命名空间来管理模块,从而避免了全局命名空间污染的问题。 - 支持循环依赖:ES6 模块化规范支持循环依赖,这意味着模块可以相互依赖而不会导致死循环。 4. CommonJS 的模块化规范有哪些缺点? CommonJS 的模块化规范有以下缺点: - 同步加载:由于 CommonJS 使用同步加载模块的方式,因此会导致应用程序的启动时间变慢。 - 无法进行静态分析:由于 CommonJS 的模块化规范是动态的,因此编译器无法在编译时确定模块的依赖关系,这会导致一些潜在的错误。 - 无法进行优化:由于 CommonJS 使用动态加载模块的方式,因此编译器无法对模块进行优化,这会导致应用程序的性能问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值