<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
先簡單說一下模組這玩意:
一個模組(module)就是一個檔案。一個指令碼就是一個模組。就這麼簡單。
內部有自己的區域性作用域以及程式,外部可以通過模組暴露的介面進行呼叫、執行模組內的程式
我們從另一個角度出發,如果沒有模組,會怎麼樣?
總之就是,難以複用、難以維護!
所以很明顯,我們需要模組化。
但是不同的環境是有不同的模組話機制的~
就目前來說,常用常見的模組化打包方式有這麼三種:
cjs 是 Node 中的模組規範,匯入和匯出的 API 為
它的 require 是同步的,因為 node 模組系統是需要同步讀取模組檔案內容並編譯執行以得到模組介面的。
而在瀏覽器端,一般都以 script 標籤引入 —— script 標籤可是天生非同步的。
so 它本身只可以執行在 node 環境下,比如ms
他就是隻支援 cjs,如果你想用 CDN 直接在瀏覽器中使用是不行的
但是,webpack 是支援 cjs 的,通過 webpack 就可以將其執行在瀏覽器中。所以,通過 webpack 打包你就可以在瀏覽器環境中使用 ms。
也就是說,在 webpack 環境下,cjs 即支援 node 環境,也支援瀏覽器環境~
除此之外,他是在執行時載入的,模組輸出的也只是拷貝
全稱 Universal Module Definition —— “通用模組定義”
這也算是應運而生,它可以在執行或者編譯時讓同一個程式碼模組使用 cjs 或者 amd
amd : Asynchronous ModuleDefinition
非同步模組定義,採用非同步方式載入模組。所有依賴模組的語句,都定義在一個回撥函數中,等到模組載入完成之後,這個回撥函數才會執行
也就是 集它們於一身,所以它既可以在 node 或者 webpack 環境下用 require 參照使用,也可以 在瀏覽器中 直接用 script 參照 CDN 使用
實現大概如下:
((root, factory) => { if (typeof define === 'function' && define.amd) { //AMD define(['jquery'], factory); } else if (typeof exports === 'object') { //CommonJS var $ = requie('jquery'); module.exports = factory($); } else { root.testModule = factory(root.jQuery); } })(this, ($) => { //todo });
也就是在定義模組的時候檢測當前環境和模組定義的方式,將各種模組方法轉換為同一種寫法
有一些包就是用的這種打包方法
有些包是多種打包方法都有,比如
antd:
es/index.js
下就是 es6 的打包方式(下面會說)
dist/antd.js
下就是 umd 的打包方式
lib/index.js
下就是 cjs 的打包方式
上面說的可能都是過去一段時間裡最好的打包方式,但是 在未來 ES6 的打包方式 應該還是會全面替代它們
esm 是基於 ESMAScript 模組化規範的 —— 他的爹就代表著 他的前途一片光明
node 環境和瀏覽器環境下都支援~
另外他模組輸出的是值的參照。
還是在編譯時載入,這意味著可以在編譯期間進行 Tree Shaking,減少 js 體積
另外還支援動態引入
const a = await import ('xxx')
不同之處在於:
以上就是前端工程化cjs umd esm 打包差異詳解的詳細內容,更多關於前端cjs umd esm 打包差異的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45