Andy的前後端技術筆記、生活紀錄
如何不依靠Vue CLI搭建Vue專案
發佈於: 2024-04-22 更新於: 2024-05-05 分類於: frontend

Vue CLI做什麼?

在Vite還沒出來前,要建立一個 Vue 專案可以透過Vue CLI,只要下簡單的指令都幫你把專案搭建好,例如安裝Vue,跟一些相依套件, 設定好webpack config…等等

從 Webpack 開始搭建一個 Vue 專案

自從開始開發前端網站時就會思考到底Vite, Webpack這類打包工具到底做了哪些事,讓框架或是單純的js, html, css的檔案可以被打包成幾個檔案。

開始囉

首先,先初始化npm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
npm init -y 
#安裝webpack相關套件
npm install webpack webpack-cli --save-dev

# 安裝vue
npm install vue@3

# 安裝vue相關套件 vue-loader用來解析Vue的在過程中需要後者來處理
npm install vue-loader@next @vue/compiler-sfc --save-dev

# 處理 style的
npm install --save-dev vue-style-loader

# html-webpack-plugin 用來處理html
# webpack-dev-server 用來建立一個開發server
npm install html-webpack-plugin webpack-dev-server --save-dev

在根目錄建立一個webpack.config.js 設定檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const path = require('path')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
mode: 'development',
// 設定js的進入點檔案,bundle是輸出檔案的名稱
entry: {
bundle: path.resolve(__dirname, 'src/main.js'),
},
// entry: path.resolve(__dirname, 'src/main.js'),

// build完後產生的檔案路徑
output: {
// dist 資料夾為通用名稱,也可以自行取名
path: path.resolve(__dirname, 'dist'),
// 設定輸出的js檔案,而上面有設定bundle name,這裡多社定一個hash值,主要是為了防止重複,讓網頁可以更新,不會因為cache而不更新畫面
filename: '[name].[contenthash].js',
},
** module: {
//處理css, Vue檔案,SASS之類的檔案也是在這裡處理
rules:[
{
test : /\.vue$/,
loader : 'vue-loader',
},
{
test : /\.css$/,
use : [
// 有多個loader的時候要寫use,只有單一個loader才能寫loader當作key
'vue-style-loader',
'css-loader',
]
}

]
},
plugins: [
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'src/index.html'),
}),
],
devServer: {
static: path.join(__dirname, 'dist'),
hot: true,
port: 3001,
open: true,
hot: true,
compress: true,
historyApiFallback: true,

},

}**
在根目錄建立src目錄,在建立App.vue, index.html, main.js

App.vue

1
2
3
4
5
6
7
8
9
10
11
<template>
<div>
<h1>{{ message }}</h1>

</div>
</template>
<script setup>
import { ref } from 'vue'
const message = ref('Hello World!')

</script>

index.html

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue 3 Webpack</title>
</head>
<body>
<!-- id是對應到main.js中的#app -->
<div id="app"></div>
</body>
</html>

main.js

1
2
3
4
import { createApp } from 'vue';
import App from './App.vue';

createApp(App).mount('#app');
結語

打包工具就是把開發者寫的一大堆JS, CSS的檔案解析打包成一包,讓瀏覽器可以拿到可以運行的幾個執行檔案,而這當中還有使用到一些技術,例如Tree shaking(用來移除沒用到的function以減少檔案大小)…等等,而在框架來說,又需要做編譯把框架的語言轉換成js,css,html這些檔案,才能讓瀏覽器可以讀取。
如果要更細節可以再去研究到底打包工作裡面做了些什麼。

--- 到底拉 The End ---