摘要:模块化主要是用来抽离公共代码,隔离作用域,避免变量冲突等。将一个复杂的系统分解为多个模块以方便编码。顺手写一个省略省略实现此时的对应的形式解析省略执行兼容,模块化语法。
模块化主要是用来抽离公共代码,隔离作用域,避免变量冲突等。将一个复杂的系统分解为多个模块以方便编码。
会讲述以下内容
CommonJS
AMD 及 核心原理实现
CMD 及 核心原理实现
UMD 及 源码解析
ES6 Module
webpack打包策略
CommonJS同步加载
CommonJS API是以在浏览器环境之外构建 JS 生态系统为目标而产生的项目
如果没有写后缀名Node会尝试为文件名添加.js、.json、.node后再搜索。
.js件会以文本格式的JavaScript脚本文件解析,.json文件会以JSON格式的文本文件解析,.node文件会以编译后的二进制文件解析。
AMD异步加载(对象)
"Asynchronous Module Definition"(异步模块定义),是由RequireJS提出的
AMD核心实现
function require (url, callback) { // url可以换成List,然后遍历; var $script = document.createElement("script"); $script.src = url; // 利用onload回调,实现依赖加载 $script.onload = function (e) { // 省略callback 检测 callback(); } document.body.appendChild($script); }CMD
按需加载
由玉伯提出的(seajs),按需解析加载模块(代价挺大的),需要使用把模块变为字符串解析一遍才知道依赖了那些模块
CMD核心实现
// ajax,怕忘了原生ajax怎么写。顺手写一个 function myAjax (url, callback) { var xhr = new XMLHttpRequest(); xhr.open("get", url); xhr.send(); xhr.onreadystatechange = function () { if (request.readyState === 4) { if (request.status === 200) { return callback(request.responseText); } else { // 省略... } } else { // 省略... } } } // 实现 function require(url) { myAjax(url, function(res) { // 此时 res 的对应JS的 String形式 // 解析 省略 // 执行 eval(res); }); }UMD
兼容AMD,CommonJS 模块化语法。
UMD源码解析
(function (root, factory) { // 判断是否支持AMD(define是否存在) if (typeof define === "function" && define.amd) { define(["b"], factory); // 判断是否支持NodeJS模块格式(exports是否存在) } else if (typeof module === "object" && module.exports) { module.exports = factory(require("b")); // 前两个都不存在,则将模块公开到全局(window或global) } else { root.returnExports = factory(root.b); } } (this, function (b) { // ... }));import
加载引用
编译时加载(静态执行)。
加载的是引用
不能处于代码块中
为了实现编译时加载
提案表示可以用 import()使用时加载
不能使用表达式和变量 等运行时加载的语法
同上
webpack打包策略import会被编译成 require/exports (CommonJS规范)
1. 直接引入
import xxx.js或者import xxx.css会像添加和标签一样注入到全局中去
2. commonjs同步语法
webpack会将require("abc.js")打包进引用它的文件中。以对象的形式获取。
3. commonjs异步加载
webpack(require.ensure):webpack 2.x 版本中的代码分割。
在commonjs中有一个Modules/Async/A规范,里面定义了require.ensure语法。webpack实现了它,作用是可以在打包的时候进行代码分片,并异步加载分片后的代码。
此时list.js会被打包成一个多带带的chunk文件。像这样:1.d6f343b727f5923508bf.js
例如:vue路由懒加载const Foo = () => import("./Foo.vue")
manifest
manifest文件是最先加载的,manifest是在vendor的基础上,再抽取出要经常变动的部分,通过manifest.js文件来管理bundle文件的运行和加载。(比如关于异步加载js模块部分的内容)
webpack v4.6.0+ 添加了预取和预加载的支持
import(/* webpackPrefetch: true */ "LoginModal"); 会生成 并追加到页面头部整理不易,喜欢请 star,https://github.com/zhongmeizhi
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103842.html
摘要:整理收藏一些优秀的文章及大佬博客留着慢慢学习原文协作规范中文技术文档协作规范阮一峰编程风格凹凸实验室前端代码规范风格指南这一次,彻底弄懂执行机制一次弄懂彻底解决此类面试问题浏览器与的事件循环有何区别笔试题事件循环机制异步编程理解的异步 better-learning 整理收藏一些优秀的文章及大佬博客留着慢慢学习 原文:https://www.ahwgs.cn/youxiuwenzhan...
摘要:了解什么是官方文档是这样介绍的点我了解官方文档简单的来说,可以看做是模块打包机它做的事情是,分析你的项目结构,找到模块以及其它的一些浏览器不能直接运行的拓展语言,等,并将其转换和打包为合适的格式供浏览器使用。 了解webpack 什么是webpack 官方文档是这样介绍的:点我了解官方文档 简单的来说,WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaSc...
摘要:前言一直混迹社区突然发现自己收藏了不少好文但是管理起来有点混乱所以将前端主流技术做了一个书签整理不求最多最全但求最实用。 前言 一直混迹社区,突然发现自己收藏了不少好文但是管理起来有点混乱; 所以将前端主流技术做了一个书签整理,不求最多最全,但求最实用。 书签源码 书签导入浏览器效果截图showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:非常的庞大,而且它是完全为设计而生的动效库。它运行于纯粹的之上,是目前最强健的动画资源库之一。可能是创建滚动特效最好用的工具,它支持大量的浏览器,只要它们支持和特性。可以通过安装吊炸天了,接近现实生活中的物理运动碰撞惯性动画库。 收集日期为2019-02-28,★代表当时的该项目在github的star数量 Animate.css 56401 ★ 一个跨浏览器的动效基础库,是许多基础动...
摘要:前言有好久没有写博客了主要这段时间都沉迷学习无法自拔了哈哈自吹一波前两天不是节吗所以就有很多福利出现了当然每个人能都获得的信息都有所不同这就是所谓的信息差秉着好东西需要分享和开源的好习惯所以来给你们送福利了其他福利一程序员节最新福利之最全资 前言 有好久没有写博客了,主要这段时间都沉迷学习无法自拔了,哈哈.自吹一波. 前两天不是1024节吗,所以就有很多福利出现了,当然每个人能都获得的...
阅读 2360·2021-11-24 09:39
阅读 3381·2021-11-15 11:37
阅读 2148·2021-10-08 10:04
阅读 3918·2021-09-09 11:54
阅读 1858·2021-08-18 10:24
阅读 985·2019-08-30 11:02
阅读 1772·2019-08-29 18:45
阅读 1628·2019-08-29 16:33