模块化加载_前端模块化概述
前端模块化开发
随着前端应用的不断复杂,我们不得不花大量的时间去管理。模块化呢,就是一种最主流的代码组织方式。它通过把我们的复杂代码,按照功能的不同,划分为不同的模块,单独维护。提高我们的开发效率,降低维护的成本。
模块化的演变过程
- 文件划分,建立不同模块的文件夹
- 缺点是污染全局作用域
- 命名冲突
- 早期模块化完全依靠约定
- 命名空间方式
- 可以解决命名冲突的问题,但是依然可以访问模块成员被修改
- 模块中的依赖关系也没有得到解决
- IIFE(立即执行函数)
- 将模块中的成员放在一个私有函数里
- 实现了私有成员的概念
- 有清晰的依赖关系
早期在没有工具和规范的情况下,我们采用以上对模块化的落地方式
模块化规范的出现
- 模块化标准 + 模块加载器
- CommomJS规范(早期前端没有使用这个规范)
-- 一个文件就是一个模块
-- 每个模块都有单独的作用域
-- 通过module.exports导出成员
-- 通过require函数加载模块
- CommonJS是以同步的方式加载模块
- AMD(Asynchronous Module Definition )
-- 异步的模块定义规范
-- Require.js 实现了这个规范,它是一个强大的模块加载器
AMD使用起来相对复杂
模块化标准规范
- 最佳实践:
在node.js中使用CommomJS规范
在浏览器中使用ES Modules规范
ES Modules基本特性:
- 自动采用严格模式,忽略“use strict”
- 每个ES Module 都是运行在单独的私有作用域中
- 它是通过CORS的方式请求外部js模块的
- scrpt标签会延迟执行脚本,相当于添加了一个defer属性
1、导入和导出:
import {name,hello} from './module.js'export {name}export function hello(){console.log('hello')
}
-- 重命名:
import {name as username} from './modules'export {username as name}
--在使用中常遇的一些问题:
- import {name, age} 并不是解构语法,而是一种固定的语法
- export{name, age} 并不是字面量对象,而是一种固定的语法
- export 导出的并不是值,而是内存地址
- import导入的成员是只读的,并不能够修改
- import 导入模块的用法和注意事项
(1)文件路径
-- 必须要有完整的文件名称
-- 相对路径中的 ./ 是不能省略的
-- 可以使用绝对路径,或者完整的url
(2)加载这个模块,但不提取它:
import {} from './module.js'// 或者import './module.js'
我们在导入一些不需要外界控制的子功能模块时会非常有用
(3)提取所有成员:
import * as mod from './module.js'
(4)动态的加载模块
-- import 只能出现在最顶层,不能嵌套在if或者函数当中
-- import函数可以帮助我们完成动态导入:
import('./module.js').then(function(module){console.log(module)
})
(5)同时导入命名成员和默认成员
import {name,age,default as title} from './module.js'// 简化import title,{name,age} from './module.js'
- 直接导入导出成员
import {Button} from './button.js'import {Avatar} from './avatar.js' exprot {Button,Avatar}// 简化
export {Button} from './button.js' export {Avatar} from './avatar.js'
ES Modules兼容性问题
- ES Modules in Node.js -与 CommonJS 交互
-- ES Modules中可以导入CommonJS模块
-- CommonJS中不能导入ES Modules模块
-- CommonJS始终只会导出一个默认成员
-- 注意:import不是解构导出对象
- ES Modules in Node.js 与 CommonJS 的差异
// CommonJS
// 加载模块函数console.log(require)// 模块对象console.log(module)// 导出对象别名console.log(exports)// 当前文件的绝对路径consoel.log(__filename)// 当前文件所在目录console.log(__dirname)
// ES Modules
// 加载模块函数import// 模块对象import module from './module.js'
console.log(module)// 导出对象别名export// 当前文件的绝对路径import {fileURLToPath} from 'url';
const __filename = fileURLToPath(import.meta.url)// 当前文件所在目录import {dirname} from 'path';
const __dirname = dirname(__filename)
模块化加载_前端模块化概述相关推荐
- 模块化加载_前端模块化简单总结
来源 | http://www.fly63.com/article/detial/9827 前言 JavaScript初期就是为了实现简单的页面交互逻辑,如今CPU.浏览器性能得到了极大的提升,很多页 ...
- 模块化加载_谈谈双亲委派模型的第四次破坏-模块化
前言 JDK9引入了Java模块化系统(Java Platform Moudle System)来实现可配置的封装隔离机制,同时JVM对类加载的架构也做出了调整,也就是双亲委派模型的第四次破坏.前三次 ...
- iframe懒加载_前端常见问题
原地址:https://blog.csdn.net/Mr_JavaScript/article/details/84311068 1. flex布局:又叫做弹性布局 任何一个容器都可以指定flex布局 ...
- dll文件懒加载_前端性能优化
# 前端性能优化 写在最前面:下面都是我对webpack的一些性能优化,想系统的学习性能优化方面的知识 推荐大家看看这本书 很系统 感觉面试也能如鱼得水 ## 构建优化 ### webpack优化 ( ...
- ES6与CommonJS的模块化加载
两个差异 CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用. 什么是值的拷贝,值的引用? 所谓值的拷贝,是在栈内存当中实现的,是一个复制的过程,复制之后两个值互不影响 值的引用 ...
- echarts与TmodJS的冲突 -- 模块化加载器之间的冲突
前些日子写了一篇关于腾讯模板引擎TmodJS的文章<模板引擎artTemplate及模板预编译器TmodJS的使用入门>,算是对其原理与使用进行了初步的接触与研究.近期在一个项目中对Tmo ...
- 模块化加载_Java9模块化的类加载机制实现剖析
前言 JDK9引入了Java模块化系统(Java Platform Moudle System)来实现可配置的封装隔离机制,同时JVM对类加载的架构也做出了调整,也就是双亲委派模型的第四次破坏.前三次 ...
- 中yeti不能加载_第二十章_类的加载过程详解
类的加载过程详解 概述 在 Java 中数据类型分为基本数据类型和引用数据类型.基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照 Java 虚拟机规范,从 Class 文件到加载到内 ...
- js让iframe延时加载_延迟加载IFRAME
js让iframe延时加载 We've known for a decade that lazy loading resources like JavaScript, CSS, and especia ...
最新文章
- Python高级函数--map/reduce
- C#全局键盘监听(Hook)的使用(转载)
- java如何將數組反轉_Java基礎練習題 (4)數組操作
- zend guard6的使用
- Linux系统监控shell脚本
- linux 总数 进程_Linux运用一些常用命令,优秀的PHPer都需掌握
- 03 - 变量的数据类型
- HTML+CSS+JS实现 ❤️canvas 3D立体图片相册幻灯片❤️
- 因为难看的签名尴尬?Python爬虫制作艺术签名软件!
- error Link 2005
- 熊博士c语言,InstallShield2015制作安装包----------安装后实现电脑开机自启动
- 全国各省份结婚离婚面板数据(2000-2019年)
- HDFS RPC 调度策略 DecayRpcScheduler 与 BackOff
- cpp 读取txt文件
- html与css编程证书,利用CSS布局做一个简单的荣誉证书(代码示例)
- Edge 浏览器 URLSearchParams bug 修复
- 【文件格式_XML_HTML_】XML、HTML文件
- 我始终相信努力奋斗的意义
- (面经总结)一篇文章带你整理面试过程中关于OSI 七层模型的相关知识
- vue级联选择框(Cascader)动态渲染数据