# Vite + Vue 3 第一個網站 ###### tags: `Vue` `Vite` ## Vite簡介 Vite(法語意為 "快速的")是一種新型前端構建工具,能夠顯著提升前端開發體驗。它主要由兩部分組成: * 一個開發服務器,它基於原生ES模組提供了豐富的內建功能,如速度快到驚人的模塊熱更新(HMR)。 * 一套構建指令,它使用Rollup打包你的代碼,並且它是預配置的,可輸出用於生產環境的高度優化過的靜態資源。 ### Why Vite? 現今常用的 webpack、Rollup 和 Parcel 等工具,當構建越來越大型的應用時,需要處理的 JavaScript Code數量也呈指數級增長,包含數千個模塊的大型項目相當普遍。 然而這時開發工具就會開始遇到效能瓶頸,通常需要很長時間,才能啟動開發服務器,即使使用模塊熱替換(HMR),文件修改後的效果也需要幾秒鐘才能在瀏覽器中反映出來。 <svg viewBox="0 0 1896 1071" fill="none" xmlns="http://www.w3.org/2000/svg"> <text fill="#FFAA3E" xml:space="preserve" style="white-space: pre" font-size="80" letter-spacing="0em"><tspan x="46" y="132.344">Bundle based dev server</tspan></text> <rect x="48" y="239" width="1086" height="767" rx="98" stroke="#FFC36B" stroke-width="4"></rect> <rect x="108" y="577" width="212" height="83" rx="10" fill="#C3E88C"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="170" y="631.488">entry</tspan></text> <rect x="476" y="712" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0.33em"><tspan x="552.5" y="768.988">···</tspan></text> <rect x="476" y="438" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="537" y="494.988">route</tspan></text> <rect x="473" y="576" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="534" y="632.988">route</tspan></text> <path d="M472.614 481.699L438.815 489.291L462.289 514.766L472.614 481.699ZM324.582 622.18L454.791 502.201L450.726 497.789L320.516 617.768L324.582 622.18Z" fill="#E06666"></path> <path d="M469 620L439 602.679V637.321L469 620ZM323 623H442V617H323V623Z" fill="#E06666"></path> <path d="M472.614 756.105L462.032 723.12L438.757 748.777L472.614 756.105ZM320.533 622.196L450.601 740.186L454.632 735.742L324.565 617.752L320.533 622.196Z" fill="#E06666"></path> <path d="M822.052 905.098L815.036 871.175L789.166 894.213L822.052 905.098ZM689.041 760.243L801.856 886.929L806.337 882.939L693.521 756.253L689.041 760.243Z" fill="#FFC36B"></path> <path d="M819.908 756.105L811.894 722.403L786.715 746.195L819.908 756.105ZM689.1 622.034L799.185 738.54L803.546 734.419L693.462 617.914L689.1 622.034Z" fill="#FFC36B"></path> <path d="M817.765 623.19L788.215 605.112L787.334 639.742L817.765 623.19ZM691.205 622.973L790.697 625.502L790.85 619.504L691.357 616.975L691.205 622.973Z" fill="#FFC36B"></path> <path d="M818.837 481.699L789.286 463.622L788.406 498.252L818.837 481.699ZM692.277 481.483L791.769 484.012L791.922 478.014L692.429 475.485L692.277 481.483Z" fill="#FFC36B"></path> <path d="M819.909 340.209L786.924 350.795L812.584 374.067L819.909 340.209ZM696.719 480.499L803.992 362.224L799.547 358.193L692.275 476.468L696.719 480.499Z" fill="#FFC36B"></path> <path d="M817.765 614.614L810.467 580.751L784.789 604.002L817.765 614.614ZM692.273 480.497L797.418 596.614L801.866 592.587L696.721 476.47L692.273 480.497Z" fill="#FFC36B"></path> <rect x="822" y="288" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="864" y="344.988">module</tspan></text> <rect x="822" y="435" width="212" height="87" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="864" y="491.488">module</tspan></text> <rect x="820" y="571" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="862" y="627.988">module</tspan></text> <rect x="822" y="718" width="212" height="87" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="864" y="774.488">module</tspan></text> <rect x="822" y="864" width="212" height="88" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0.33em"><tspan x="898.5" y="920.988">···</tspan></text> <path d="M1239 627L1209 609.679V644.321L1239 627ZM1136 630H1212V624H1136V630Z" fill="#FFC36B"></path> <path d="M1596 627L1566 609.679V644.321L1596 627ZM1493 630H1569V624H1493V630Z" fill="#FFC36B"></path> <rect x="1239" y="545" width="254" height="144" rx="10" fill="#C692EA"></rect> <text fill="white" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1306.5" y="629.988">Bundle</tspan></text> <rect x="1596" y="543" width="254" height="143" rx="10" fill="#009688"></rect> <text fill="white" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1667.71" y="604.988">Server </tspan><tspan x="1675.76" y="649.988">ready</tspan></text> </svg> 圖片來源:https://vitejs.dev/guide/why.html Vite與以往的傳統打包方式不同,透過利用瀏覽器支援的Native ESM 進行運作,來改上述的問題,Vite 根據 Http的request 來載入模組進行處理,實現真正的依需求加載。 <svg viewBox="0 0 1896 1071" fill="none" xmlns="http://www.w3.org/2000/svg"> <text fill="#FFAA3E" xml:space="preserve" style="white-space: pre" font-size="80" letter-spacing="0em"><tspan x="45" y="129.344">Native ESM based dev server</tspan></text> <rect x="632" y="526" width="273" height="106" rx="10" fill="#C3E88C"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="724.5" y="591.988">entry</tspan></text> <rect x="1106" y="699" width="274" height="114" rx="10" fill="#666665"></rect> <g filter="url(#filter0_d_5_61)"> <text fill="#CCCCCB" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0.33em"><tspan x="1213.5" y="768.988">···</tspan></text> </g> <rect x="1106" y="346" width="274" height="113" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1198" y="415.488">route</tspan></text> <rect x="1102" y="524" width="273" height="114" rx="10" fill="#666665"></rect> <text fill="#CCCCCB" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1193.5" y="593.988">route</tspan></text> <path d="M1101.79 402.463L1067.99 410.054L1091.46 435.529L1101.79 402.463ZM910.168 583.106L1083.96 422.965L1079.9 418.553L906.102 578.693L910.168 583.106Z" fill="#C892E9"></path> <path d="M1097 581L1067 563.679V598.321L1097 581ZM908 584H1070V578H908V584Z" fill="#999899"></path> <path d="M1101.79 756.57L1091.2 723.584L1067.93 749.242L1101.79 756.57ZM906.119 583.121L1079.77 740.651L1083.8 736.207L910.151 578.677L906.119 583.121Z" fill="#999899"></path> <path d="M1552.72 948.839L1545.7 914.916L1519.83 937.953L1552.72 948.839ZM1381.73 761.331L1532.52 930.67L1537 926.68L1386.21 757.341L1381.73 761.331Z" fill="#999899"></path> <path d="M1549.95 756.569L1541.94 722.868L1516.76 746.659L1549.95 756.569ZM1381.79 582.96L1529.23 739.005L1533.59 734.884L1386.15 578.839L1381.79 582.96Z" fill="#999899"></path> <path d="M1547.19 585.049L1517.64 566.972L1516.76 601.602L1547.19 585.049ZM1383.89 583.898L1520.12 587.362L1520.27 581.364L1384.04 577.9L1383.89 583.898Z" fill="#999899"></path> <path d="M1548.57 402.463L1519.02 384.386L1518.14 419.015L1548.57 402.463ZM1385.27 401.312L1521.5 404.776L1521.66 398.778L1385.43 395.314L1385.27 401.312Z" fill="#C892E9"></path> <path d="M631.489 585.049L601.583 567.567L601.396 602.207L631.489 585.049ZM375.576 586.666L604.473 587.903L604.506 581.903L375.608 580.666L375.576 586.666Z" fill="#C892E9"></path> <path d="M1549.95 219.877L1516.97 230.462L1542.63 253.735L1549.95 219.877ZM1390.34 400.329L1534.04 241.892L1529.59 237.861L1385.89 396.298L1390.34 400.329Z" fill="#C892E9"></path> <path d="M1547.19 573.983L1539.89 540.12L1514.21 563.372L1547.19 573.983ZM1385.89 400.327L1526.84 555.983L1531.29 551.956L1390.34 396.3L1385.89 400.327Z" fill="#C892E9"></path> <rect x="1553" y="152" width="274" height="113" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1626" y="221.488">module</tspan></text> <rect x="1553" y="341" width="274" height="114" rx="10" fill="#4FC08D"></rect> <text fill="#15505C" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1621.5" y="411.818">module</tspan></text> <rect x="1550" y="517" width="274" height="114" rx="10" fill="#666665"></rect> <text fill="#CCCCCB" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1623" y="586.988">module</tspan></text> <rect x="1553" y="707" width="274" height="113" rx="10" fill="#666665"></rect> <text fill="#CCCCCB" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="1626" y="776.488">module</tspan></text> <rect x="1553" y="896" width="274" height="113" rx="10" fill="#666665"></rect> <text fill="#CCCCCB" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0.33em"><tspan x="1660.5" y="965.488">···</tspan></text> <rect x="45" y="491" width="330" height="179" rx="10" fill="#029788"></rect> <text fill="white" xml:space="preserve" style="white-space: pre" font-size="38" font-weight="600" letter-spacing="0em"><tspan x="154.707" y="570.988">Server </tspan><tspan x="162.76" y="615.988">ready</tspan></text> <line x1="507.615" y1="459.201" x2="506.232" y2="569.859" stroke="#C892E9" stroke-width="4" stroke-dasharray="8 8"></line> <line x1="1038.78" y1="733.073" x2="1037.37" y2="883.845" stroke="#E06666" stroke-width="4" stroke-dasharray="8 8"></line> <text fill="#E06666" xml:space="preserve" style="white-space: pre" font-size="38" letter-spacing="0em"><tspan x="918" y="938.988">Dynamic import </tspan><tspan x="918" y="983.988">(code split point)</tspan></text> <text fill="#C892E9" xml:space="preserve" style="white-space: pre" font-size="38" letter-spacing="0em"><tspan x="399" y="431.488">HTTP request</tspan></text> <defs> <filter id="filter0_d_5_61" x="1212.15" y="752.766" width="60.9863" height="13.2324" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix> <feOffset dy="4"></feOffset> <feGaussianBlur stdDeviation="2"></feGaussianBlur> <feComposite in2="hardAlpha" operator="out"></feComposite> <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"></feColorMatrix> <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_61"></feBlend> <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_61" result="shape"></feBlend> </filter> </defs> </svg> 圖片來源:https://vitejs.dev/guide/why.html ## 環境建置及專案建立 #### Step 1.安裝 Node.js及開發環境 [Download NodeJs](https://nodejs.org/en/download/) 安裝完成後,執行以下指令,確認目前執行的版本: :::info node -v ::: 這邊我選擇 VS Code當開發環境,可依個人習慣及喜好選擇<br> [Download Visual Studio Code](https://code.visualstudio.com/download) #### Step 2.建置Vite專案 :::info //npm <br> $ npm init vite@latest ::: :::info //yarn <br> $ yarn create vite ::: #### Step 3.設定專案名稱 :::success ? Project name: » <font style='color:red'>專案名稱</font> ::: #### Step 3.選擇framework 從這裡可以看出vite連React都有支援,不過因為本次目的為Vue3+vite,因此這邊選擇vue :::success ? Select a framework: » - Use arrow-keys. Return to submit. <ul> <li>Vanilla</li> <li style='color:red'>Vue</li> <li>React</li> <li>Preact</li> <li>Lit</li> <li>Svelte</li> <li>Others</li> </ul> ::: #### Step 5.選擇variant 這邊可以看需求來選擇,不過這次我們只是要簡單測試,所以這邊選擇最單純的JavaScript :::success ? Select a variant: » - Use arrow-keys. Return to submit. <ul> <li style='color:red'>JavaScript</li> <li>TypeScript</li> <li>Customize with create-vue ↗</li> <li>Nuxt ↗</li> </ul> ::: #### Step 6.建置完成 Done. Now run: <br> <blockquote>cd vite_helloword</blockquote> <blockquote>npm install</blockquote> <blockquote>npm run dev</blockquote> ## 專案設定 #### Step 1.開啟專案  #### Step 2.安裝相關套件 從Step 1.的圖片中,我們可以發現其中並沒有node_modules的資料夾,所以首先必需先安裝相關的套件。 :::info npm install :::   #### Step 3.執行專案 :::info npm run dev :::  ## 參考資料 * https://vitejs.dev/guide/why.html * https://ithelp.ithome.com.tw/articles/10287222 * https://hackmd.io/@Yan06/S1ENNtiUc * https://ithelp.ithome.com.tw/articles/10266460 * https://shubo.io/vite/
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.