Slide 1

Slide 1 text

五倍學院 從亂七八糟到組織有序

Slide 2

Slide 2 text

五倍學院 愛玩、愛現,喜歡冷門的玩具 網站開發者、講師、作家 技術推廣、企業訓練、技術諮詢 部落格:kaochenlong.com 高見龍 @eddiekao

Slide 3

Slide 3 text

五倍學院

Slide 4

Slide 4 text

五倍學院 從亂七八糟到組織有序

Slide 5

Slide 5 text

五倍學院

Slide 6

Slide 6 text

五倍學院 前端?不就是寫網頁的嘛

Slide 7

Slide 7 text

五倍學院 模組化?

Slide 8

Slide 8 text

五倍學院 JavaScript = 玩具 1995 年

Slide 9

Slide 9 text

五倍學院 你知道在最初版本的 JS 是沒有陣列的嗎?

Slide 10

Slide 10 text

五倍學院 石器時代

Slide 11

Slide 11 text

五倍學院 模組化?

Slide 12

Slide 12 text

五倍學院 no module

Slide 13

Slide 13 text

五倍學院 $().ready(function () { console.log("MWC 2023"); }); </ script> $

Slide 14

Slide 14 text

五倍學院 < / script> <script type="text/javascript"> $().ready(function () { console.log("MWC 2023"); }); </ script>

Slide 15

Slide 15 text

五倍學院 載入的順序很重要

Slide 16

Slide 16 text

五倍學院 $().ready(function () { console.log("MWC 2023"); }); </ script> <script src="jquery.min.js"> < / script>

Slide 17

Slide 17 text

五倍學院 套件放在 裡, 自己寫的放 前

Slide 18

Slide 18 text

五倍學院 污染全域變數

Slide 19

Slide 19 text

五倍學院 使用 IIFE Immediately Invoked Function Expression

Slide 20

Slide 20 text

五倍學院 const MyApp = MyApp || {} MyApp.UserModule = (function () { // 登入功能 function login(username, password) {} // 登出功能 function logout() {} return { login, logout } })() MyApp.UserModule.login("mwc", "2023") MyApp.UserModule.logout() 模組化!

Slide 21

Slide 21 text

五倍學院 官方不做,社群做!

Slide 22

Slide 22 text

五倍學院 戰國時代

Slide 23

Slide 23 text

五倍學院 群魔亂舞 / 群雄割據 CommonJS, AMD/CMD, UMD...etc

Slide 24

Slide 24 text

五倍學院 CommonJS

Slide 25

Slide 25 text

五倍學院 // 我是 mwc_mod.js const MWC = function () { console.log("ModernWeb Conference") } module.exports.MWC = MWC

Slide 26

Slide 26 text

五倍學院 // 我是 main.js const mod = require("./mwc_mod.js") console.log(mod) // { MWC: [Function: MWC] } mod.MWC() // 印出 ModernWeb Conference

Slide 27

Slide 27 text

五倍學院 // 我是 mwc_mod.js const MWC = function () { console.log("ModernWeb Conference") } module.exports.MWC = MWC 這是什麼?

Slide 28

Slide 28 text

五倍學院 console.log(module) // { // id: '.', // path: '/private/tmp/mwc-demo', // exports: { MWC: [Function: MWC] }, // filename: '/private/tmp/mwc-demo/m.js', // loaded: false, // children: [], // paths: [ // '/private/tmp/mwc-demo/node_modules', // '/private/tmp/node_modules', // '/private/node_modules', // '/node_modules' // ] // } 在這裡!

Slide 29

Slide 29 text

五倍學院 console.log(module.exports === exports) // true

Slide 30

Slide 30 text

五倍學院 const MWC = function () { console.log("ModernWeb Conference") } // module.exports.MWC = MWC exports.MWC = MWC 同樣效果

Slide 31

Slide 31 text

五倍學院 // 我是 mwc_mod.js const MWC = function () { console.log("ModernWeb Conference") } exports.MWC = MWC exports = "謝謝你 9527" console.log(exports) // 印出 謝謝你 9527 console.log(module.exports) // { MWC: [Function: MWC] } 咦?

Slide 32

Slide 32 text

五倍學院 同步載入

Slide 33

Slide 33 text

五倍學院 AMD Asynchronous Module Definition

Slide 34

Slide 34 text

五倍學院 非同步

Slide 35

Slide 35 text

五倍學院 require.js

Slide 36

Slide 36 text

五倍學院 // 我是 hello.js define(function () { const hello = function () { console.log("HELLO") } return { hello, } }) // 我是 world.js define(function () { const world = function () { console.log("WORLD") } return { world, } }) 模組 模組

Slide 37

Slide 37 text

五倍學院 </ script> <title>MWC 2023 </ title> </ head> <body> </ body> </ html> 發動!

Slide 38

Slide 38 text

五倍學院 // 我是 main.js require(["hello", "world"], function (h, w) { h.hello() w.world() }) 載入

Slide 39

Slide 39 text

五倍學院 UMD Universal Module Definition

Slide 40

Slide 40 text

五倍學院 (function (root, factory) { if (typeof define === "function" && define.amd) { // 是 AMD! define(["deps"], factory) } else if (typeof exports === "object") { // 是 CommonJS! module.exports = factory(require("deps")) } else { // 其它,來去全域變數上塞東 西 ! root.MyModule = factory(root) } })(this, function (deps) { return { MWC: function () { console.log("ModernWeb Conference") }, year: "2023", } }) 檢查 檢查 IIFE

Slide 41

Slide 41 text

五倍學院 jQuery

Slide 42

Slide 42 text

五倍學院 https: // 5xcamp.us/jquery-source

Slide 43

Slide 43 text

五倍學院 ESM? ES Module 2015 年

Slide 44

Slide 44 text

五倍學院 工業革命時代

Slide 45

Slide 45 text

五倍學院 Node = 蒸汽機

Slide 46

Slide 46 text

五倍學院 轉譯、打包、建置工具!

Slide 47

Slide 47 text

五倍學院 https: // webpack.js.org/

Slide 48

Slide 48 text

五倍學院 支援多種模組系統 CommonJS, AMD, ESM...etc

Slide 49

Slide 49 text

五倍學院 webpack.config.js 🤮

Slide 50

Slide 50 text

五倍學院 https: // parceljs.org/

Slide 51

Slide 51 text

五倍學院 esbuild

Slide 52

Slide 52 text

五倍學院 天下武功,唯快不破

Slide 53

Slide 53 text

五倍學院 https: // esbuild.github.io/

Slide 54

Slide 54 text

五倍學院 為什麼這麼快?

Slide 55

Slide 55 text

五倍學院 Go

Slide 56

Slide 56 text

五倍學院 https: // bun.sh/

Slide 57

Slide 57 text

五倍學院 Zig

Slide 58

Slide 58 text

五倍學院 大內捲時代

Slide 59

Slide 59 text

五倍學院 https: // rollupjs.org/

Slide 60

Slide 60 text

五倍學院 Tree-Shaking 除屑優化

Slide 61

Slide 61 text

五倍學院 // 我是 extra_fish.js const 工 具 人 = "🛠🔨🔧⛏" function 多餘() { console.log("不是多了塊 魚 🐟,是多餘,你呀,你根本就是多餘呀你") } function MWC(year) { return `ModernWeb Conference ${year}` } console.log(MWC(2023)) :)

Slide 62

Slide 62 text

五倍學院

Slide 63

Slide 63 text

五倍學院 現代

Slide 64

Slide 64 text

五倍學院 瀏覽器原生支援 ESM! import vue from 'react' 🙌

Slide 65

Slide 65 text

五倍學院 https: // developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/import

Slide 66

Slide 66 text

五倍學院 </ script>

Slide 67

Slide 67 text

五倍學院 MWC 2023 title> import has from "lodash-es/has.js" </ script> </ head> <body> </ body> </ html>

Slide 68

Slide 68 text

五倍學院

Slide 69

Slide 69 text

五倍學院 MWC 2023 title> import has from "./node_modules/lodash-es/has.js" </ script> </ head> <body> </ body> </ html> 👌

Slide 70

Slide 70 text

五倍學院 MWC 2023 < / title> import day from "./node_modules/dayjs/dayjs.min.js" </ script> < / head> <body> </ body> </ html>

Slide 71

Slide 71 text

五倍學院

Slide 72

Slide 72 text

五倍學院 Vite /vit/

Slide 73

Slide 73 text

五倍學院 Vite 不是 Vue 的專武!

Slide 74

Slide 74 text

五倍學院 Vite 不是打包工具

Slide 75

Slide 75 text

五倍學院 esbuild ↢ Vite ↣ Rollup pre- bundling production bundle dev server

Slide 76

Slide 76 text

五倍學院 HMR

Slide 77

Slide 77 text

五倍學院 https: // 5xcamp.us/mwc-vite

Slide 78

Slide 78 text

五倍學院 https: // twitter.com/youyuxi/status/1709943106215530867

Slide 79

Slide 79 text

五倍學院 Rollup ↣ Rolldown

Slide 80

Slide 80 text

五倍學院 Rust

Slide 81

Slide 81 text

五倍學院 https: // 5xcamp.us/ithome-rust

Slide 82

Slide 82 text

五倍學院 importmap

Slide 83

Slide 83 text

五倍學院 </ script>

Slide 84

Slide 84 text

五倍學院 </ script>

Slide 85

Slide 85 text

五倍學院 MWC 2023 title> { "imports": { "dayjs": "https: // ga.jspm.io/npm:dayjs@1.11.7/dayjs.min.js" } } < / script> </ head> <body> < / body> < / html>

Slide 86

Slide 86 text

五倍學院 這不就 CDN 嗎?

Slide 87

Slide 87 text

五倍學院 MWC 2023 title> { "imports": { "dayjs": "https: / / ga.jspm.io/npm:dayjs@1.11.7/dayjs.min.js", "mwc-day": "https: // ga.jspm.io/npm:dayjs@1.11.7/dayjs.min.js" } } </ script> <script type="module"> import day from "dayjs" import d from "mwc-day" </ script> < / head> <body> < / body> < / html>

Slide 88

Slide 88 text

五倍學院 no bundle

Slide 89

Slide 89 text

五倍學院 這樣效能好嗎?CDN 穩定嗎?

Slide 90

Slide 90 text

五倍學院 https: // 5xcamp.us/

Slide 91

Slide 91 text

五倍學院 擺脫 node_modules! 🙌

Slide 92

Slide 92 text

五倍學院 更多關於 importmap

Slide 93

Slide 93 text

五倍學院 12/16

Slide 94

Slide 94 text

五倍學院 工商服務 實體、線上課程、企業內訓 有時間 來實體 沒時間 買線上

Slide 95

Slide 95 text

五倍學院 工商服務 Node / Python / Django / Rust 課程 有時間 來實體 沒時間 買線上

Slide 96

Slide 96 text

五倍學院 愛玩、愛現,喜歡冷門的玩具 網站開發者、講師、作家 技術推廣、企業訓練、技術諮詢 部落格:kaochenlong.com 高見龍 @eddiekao