摘要:模塊化主要是用來(lái)抽離公共代碼,隔離作用域,避免變量沖突等。將一個(gè)復(fù)雜的系統(tǒng)分解為多個(gè)模塊以方便編碼。順手寫(xiě)一個(gè)省略省略實(shí)現(xiàn)此時(shí)的對(duì)應(yīng)的形式解析省略執(zhí)行兼容,模塊化語(yǔ)法。
模塊化主要是用來(lái)抽離公共代碼,隔離作用域,避免變量沖突等。將一個(gè)復(fù)雜的系統(tǒng)分解為多個(gè)模塊以方便編碼。
會(huì)講述以下內(nèi)容
CommonJS
AMD 及 核心原理實(shí)現(xiàn)
CMD 及 核心原理實(shí)現(xiàn)
UMD 及 源碼解析
ES6 Module
webpack打包策略
CommonJS同步加載
CommonJS API是以在瀏覽器環(huán)境之外構(gòu)建 JS 生態(tài)系統(tǒng)為目標(biāo)而產(chǎn)生的項(xiàng)目
如果沒(méi)有寫(xiě)后綴名Node會(huì)嘗試為文件名添加.js、.json、.node后再搜索。
.js件會(huì)以文本格式的JavaScript腳本文件解析,.json文件會(huì)以JSON格式的文本文件解析,.node文件會(huì)以編譯后的二進(jìn)制文件解析。
AMD異步加載(對(duì)象)
"Asynchronous Module Definition"(異步模塊定義),是由RequireJS提出的
AMD核心實(shí)現(xiàn)
function require (url, callback) { // url可以換成List,然后遍歷; var $script = document.createElement("script"); $script.src = url; // 利用onload回調(diào),實(shí)現(xiàn)依賴加載 $script.onload = function (e) { // 省略callback 檢測(cè) callback(); } document.body.appendChild($script); }CMD
按需加載
由玉伯提出的(seajs),按需解析加載模塊(代價(jià)挺大的),需要使用把模塊變?yōu)樽址馕鲆槐椴胖酪蕾嚵四切┠K
CMD核心實(shí)現(xiàn)
// ajax,怕忘了原生ajax怎么寫(xiě)。順手寫(xiě)一個(gè) 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 { // 省略... } } } // 實(shí)現(xiàn) function require(url) { myAjax(url, function(res) { // 此時(shí) res 的對(duì)應(yīng)JS的 String形式 // 解析 省略 // 執(zhí)行 eval(res); }); }UMD
兼容AMD,CommonJS 模塊化語(yǔ)法。
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")); // 前兩個(gè)都不存在,則將模塊公開(kāi)到全局(window或global) } else { root.returnExports = factory(root.b); } } (this, function (b) { // ... }));import
加載引用
編譯時(shí)加載(靜態(tài)執(zhí)行)。
加載的是引用
不能處于代碼塊中
為了實(shí)現(xiàn)編譯時(shí)加載
提案表示可以用 import()使用時(shí)加載
不能使用表達(dá)式和變量 等運(yùn)行時(shí)加載的語(yǔ)法
同上
webpack打包策略import會(huì)被編譯成 require/exports (CommonJS規(guī)范)
1. 直接引入
import xxx.js或者import xxx.css會(huì)像添加和標(biāo)簽一樣注入到全局中去
2. commonjs同步語(yǔ)法
webpack會(huì)將require("abc.js")打包進(jìn)引用它的文件中。以對(duì)象的形式獲取。
3. commonjs異步加載
webpack(require.ensure):webpack 2.x 版本中的代碼分割。
在commonjs中有一個(gè)Modules/Async/A規(guī)范,里面定義了require.ensure語(yǔ)法。webpack實(shí)現(xiàn)了它,作用是可以在打包的時(shí)候進(jìn)行代碼分片,并異步加載分片后的代碼。
此時(shí)list.js會(huì)被打包成一個(gè)多帶帶的chunk文件。像這樣:1.d6f343b727f5923508bf.js
例如:vue路由懶加載const Foo = () => import("./Foo.vue")
manifest
manifest文件是最先加載的,manifest是在vendor的基礎(chǔ)上,再抽取出要經(jīng)常變動(dòng)的部分,通過(guò)manifest.js文件來(lái)管理bundle文件的運(yùn)行和加載。(比如關(guān)于異步加載js模塊部分的內(nèi)容)
webpack v4.6.0+ 添加了預(yù)取和預(yù)加載的支持
import(/* webpackPrefetch: true */ "LoginModal"); 會(huì)生成 并追加到頁(yè)面頭部整理不易,喜歡請(qǐng) star,https://github.com/zhongmeizhi
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103842.html
摘要:整理收藏一些優(yōu)秀的文章及大佬博客留著慢慢學(xué)習(xí)原文協(xié)作規(guī)范中文技術(shù)文檔協(xié)作規(guī)范阮一峰編程風(fēng)格凹凸實(shí)驗(yàn)室前端代碼規(guī)范風(fēng)格指南這一次,徹底弄懂執(zhí)行機(jī)制一次弄懂徹底解決此類面試問(wèn)題瀏覽器與的事件循環(huán)有何區(qū)別筆試題事件循環(huán)機(jī)制異步編程理解的異步 better-learning 整理收藏一些優(yōu)秀的文章及大佬博客留著慢慢學(xué)習(xí) 原文:https://www.ahwgs.cn/youxiuwenzhan...
摘要:了解什么是官方文檔是這樣介紹的點(diǎn)我了解官方文檔簡(jiǎn)單的來(lái)說(shuō),可以看做是模塊打包機(jī)它做的事情是,分析你的項(xiàng)目結(jié)構(gòu),找到模塊以及其它的一些瀏覽器不能直接運(yùn)行的拓展語(yǔ)言,等,并將其轉(zhuǎn)換和打包為合適的格式供瀏覽器使用。 了解webpack 什么是webpack 官方文檔是這樣介紹的:點(diǎn)我了解官方文檔 簡(jiǎn)單的來(lái)說(shuō),WebPack可以看做是模塊打包機(jī):它做的事情是,分析你的項(xiàng)目結(jié)構(gòu),找到JavaSc...
摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理,不求最多最全,但求最實(shí)用。 書(shū)簽源碼 書(shū)簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:非常的龐大,而且它是完全為設(shè)計(jì)而生的動(dòng)效庫(kù)。它運(yùn)行于純粹的之上,是目前最強(qiáng)健的動(dòng)畫(huà)資源庫(kù)之一。可能是創(chuàng)建滾動(dòng)特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過(guò)安裝吊炸天了,接近現(xiàn)實(shí)生活中的物理運(yùn)動(dòng)碰撞慣性動(dòng)畫(huà)庫(kù)。 收集日期為2019-02-28,★代表當(dāng)時(shí)的該項(xiàng)目在github的star數(shù)量 Animate.css 56401 ★ 一個(gè)跨瀏覽器的動(dòng)效基礎(chǔ)庫(kù),是許多基礎(chǔ)動(dòng)...
摘要:前言有好久沒(méi)有寫(xiě)博客了主要這段時(shí)間都沉迷學(xué)習(xí)無(wú)法自拔了哈哈自吹一波前兩天不是節(jié)嗎所以就有很多福利出現(xiàn)了當(dāng)然每個(gè)人能都獲得的信息都有所不同這就是所謂的信息差秉著好東西需要分享和開(kāi)源的好習(xí)慣所以來(lái)給你們送福利了其他福利一程序員節(jié)最新福利之最全資 前言 有好久沒(méi)有寫(xiě)博客了,主要這段時(shí)間都沉迷學(xué)習(xí)無(wú)法自拔了,哈哈.自吹一波. 前兩天不是1024節(jié)嗎,所以就有很多福利出現(xiàn)了,當(dāng)然每個(gè)人能都獲得的...
閱讀 2473·2021-11-24 09:39
閱讀 3405·2021-11-15 11:37
閱讀 2250·2021-10-08 10:04
閱讀 3965·2021-09-09 11:54
閱讀 1882·2021-08-18 10:24
閱讀 1032·2019-08-30 11:02
閱讀 1792·2019-08-29 18:45
閱讀 1651·2019-08-29 16:33