美文网首页
esmodule规范

esmodule规范

作者: 隔壁老王z | 来源:发表于2021-05-06 01:15 被阅读0次

模块化解决的问题:
命名冲突(命名空间来解决)
采用自执行函数的方式 (解决代码的高内聚 低耦合问题)

模块的几种规范
cmd:例如seajs
amd:例如requirejs
commonjs模块规范 node采用的就是该规范
导入 -,导出:require module.export
es6模块规范 esModule es6原生支持的规范(目前需要使用babel来兼容)
导入 - import,导出 - export
umd 统一模块,支持多种规范混合使用

esModule特点:

  • 可以变量提升,可以在未定义之前使用
console.log(a);

import {a} from './a.js';
  • 不能放到作用域下,只能放到顶层环境
{
    import {a} from './a.js'; // 报错
}
  • 导出的是变量,不是具体的值
// a.js
let a = 1;
let b = 2;
let c = 3;

setInterval(() => {
    a++
}, 1000);

export {
    a,
    b,
    c
}

// index.js
import * as obj from './a.js'; // 将变量全部导出,取的时候通过obj.a,obj.b来取
setInterval(() => {
    console.log(obj.a, obj.b, obj.c); 
    // 结果可以看到obj.a一直在变
    // 假如取的是a的值,那么后面a.js中不管a再怎么变,这边取到的a还会一直是最初的1
})
  • 默认导出 default,直接导出某个变量,外层引入的时候,可以直接获取到,并且default导出的是值
// default在导入的时候可以更改为其他变量名
// a.js
export default {a: 1, b: 2}

// index.js
import obj from './a.js';
  • 导入并导出,但是不能使用导入的变量,如果导出的变量同名,以第一次导出的为准
// index.js
// 没有import关键字,直接export出去,这种做法是用于总入口,比如有个global.js,里面需要拿到a和b的导出变量
export * from './a.js';
export * from './b.js';

// global.js
import {a, b} from './index.js'
  • defalut导出的是值,常见面试题:export 和 export default的区别
// a.js
let a = 100;
let q = 100;
export default q;
export {a};

setInterval(() => {
    a++;
    q++
})

// index.js
import obj, {a} from './a';

setInterval(() => {
     console.log(obj, a);
})
// 可以看到a会变,而obj不会
// 因此 export 变量 和 export default 的区别就是,一个导出的是变量,一个导出的是值
  • 动态导入,导入的结果会被包装成一个promise
let btn = document.createdElement('btn');

btn.addEventListener('click', () => {
    import('./a.js').then(res => {
        console.log(res.default)
    })
});

document.body.appendChild(btn);

https://www.jianshu.com/p/72a3603984f3

相关文章

  • esmodule规范

    模块化解决的问题:命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • ESModule

    模块化解决的问题 命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • Webpack基础打包(一)

    1. webpack介绍 commonjs和esmodule不是随随便便就可以用的 esmodule在一些特殊的浏...

  • 关于webpack常见的题目

    1. webpack中的Module指的是什么? webpack支持ESModule, CommonJS, AMD...

  • CommonJS与EsModule

    javascript模块化编程模块化可以更方便地使用别人的代码,想要什么功能,就加载什么模块。目前流行Javasc...

  • 46.ESModule详解

    认识 ES Module JavaScript没有模块化一直是它的痛点,所以才会产生我们前面学习的社区规范:Com...

  • 升级vue-loader依赖包后造成require()方法返回是

    vue-loader在13.x以后通过require导入的包默认esModule是true;造成直接通过requi...

  • 前端工程化(四)

    Rollup Rollup 仅仅是一个 ESM 打包器初衷就是只提供一个高效的 ESModule 打包器构建出结构...

  • js中UMD模块的声明模式

    大家都知道AMD,common.js ,ESModule的模块的异同,所以有时候需要声明为UMD的模式来兼容这几种...

  • 超详细的webpack之开始体验吧

    webpack是一个前端工程化非常重要静态模块化打包工具,可以帮我们把 less、sass、esmodule、co...

网友评论

      本文标题:esmodule规范

      本文链接:https://www.haomeiwen.com/subject/gfrrdltx.html