vue-install.sh vue安装脚本

!/bin/bash

退出时清理可能的问题

set -e
trap 'echo "安装过程中出现错误,请检查日志"; exit 1' ERR

定义颜色

GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

显示标题

echo -e "\({BLUE}======================================\){NC}"
echo -e "${BLUE} Vue.js 安装助手脚本 v1.0 \({NC}" echo -e "\){BLUE}======================================${NC}"

检查是否以root权限运行

if [ "$EUID" -ne 0 ]; then
echo "请以root权限运行此脚本"
exit 1
fi

检查Node.js是否已安装

if ! command -v node &> /dev/null; then
echo "✗ 未检测到Node.js"
echo "正在为您安装Node.js..."

安装Node.js 18.x版本

echo "安装Node.js 18.x版本..."
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs

验证安装

NODE_VERSION=$(node -v)
echo "✓ Node.js \(NODE_VERSION 安装成功" else NODE_VERSION=\)(node -v)
echo "✓ 检测到Node.js版本: $NODE_VERSION"
fi

检查npm是否已安装

if ! command -v npm &> /dev/null; then
echo "✗ 未检测到npm"
echo "正在安装npm..."
apt-get install -y npm
echo "✓ npm已安装"
else
NPM_VERSION=$(npm -v)
echo "✓ 检测到npm版本: $NPM_VERSION"
fi

安装Vue CLI

echo "正在安装Vue CLI..."
npm install -g @vue/cli

验证Vue CLI安装

VUE_VERSION=$(vue --version)
echo "✓ Vue CLI $VUE_VERSION 安装成功"

提供一些帮助信息

echo ""
echo ""
echo "Vue.js 安装完成!"
echo "
"
echo "您可以使用以下命令创建一个新的Vue项目:"
echo " vue create my-project"
echo ""
echo "进入项目目录后,可以运行开发服务器:"
echo " cd my-project"
echo " npm run serve"
echo "======================================"

检查包管理器

check_package_manager() {
if command -v npm &> /dev/null; then
PACKAGE_MANAGER="npm"
echo -e "\({GREEN}✓ 使用npm作为包管理器\){NC}"
elif command -v pnpm &> /dev/null; then
PACKAGE_MANAGER="pnpm"
echo -e "\({GREEN}✓ 使用pnpm作为包管理器\){NC}"
elif command -v yarn &> /dev/null; then
PACKAGE_MANAGER="yarn"
echo -e "\({GREEN}✓ 使用yarn作为包管理器\){NC}"
elif command -v bun &> /dev/null; then
PACKAGE_MANAGER="bun"
echo -e "\({GREEN}✓ 使用bun作为包管理器\){NC}"
else
PACKAGE_MANAGER="npm"
echo -e "\({YELLOW}! 未检测到包管理器,默认使用npm\){NC}"
fi
}

检查网络访问选项

check_network_access() {
echo -e "\n\({BLUE}设置网络访问选项:\){NC}"
echo "1) 仅本地访问 (localhost)"
echo "2) 允许外网访问 (0.0.0.0)"

read -p "请选择 [1-2,默认1]: " network_option

if [ "\(network_option" == "2" ]; then echo -e "\){GREEN}✓ 设置为允许外网访问\({NC}" NETWORK_HOST="0.0.0.0" # 获取本机IP地址 IP_ADDR=\)(hostname -I | awk '{print \(1}') echo -e "\){GREEN}本机IP地址: \({IP_ADDR}\){NC}"
echo -e "\({YELLOW}项目启动后可通过 http://\)IP_ADDR:5173 访问\({NC}" else echo -e "\){GREEN}✓ 设置为仅本地访问${NC}"
NETWORK_HOST="localhost"
fi
}

显示安装选项

show_options() {
echo -e "\n\({BLUE}请选择Vue.js安装方式:\){NC}"
echo "1) 创建Vue.js项目 (使用create-vue脚手架)"
echo "2) 从CDN使用Vue.js (无需构建工具)"
echo "3) 使用Docker安装Vue.js (容器化环境)"
echo "4) 单页面HTML/JS示例 (快速学习使用)"
echo "5) 退出"

read -p "请选择 [1-5]: " option

case \(option in 1) create_vue_project ;; 2) use_vue_from_cdn ;; 3) use_vue_with_docker ;; 4) create_vue_sample ;; 5) echo "安装已取消"; exit 0 ;; *) echo -e "\){RED}无效选项${NC}"; show_options ;;
esac
}

选项1: 创建Vue.js项目

create_vue_project() {
echo -e "\n\({BLUE}=== 创建Vue.js项目 ===\){NC}"

获取项目名称

read -p "项目名称: " project_name
if [ -z "$project_name" ]; then
project_name="vue-project"
echo "使用默认项目名称: $project_name"
fi

检查目录是否存在

if [ -d "\(project_name" ]; then echo -e "\){YELLOW}警告: 目录 '\(project_name' 已存在\){NC}"
read -p "是否继续? (y/n): " continue_install
if [[ ! "\(continue_install" =~ ^[Yy]\) ]]; then
echo "安装已取消"
exit 0
fi
fi

检查网络访问选项

check_network_access

echo -e "\n\({BLUE}使用 create-vue 创建项目...\){NC}"
echo -e "\({YELLOW}提示: 将询问您是否需要各种功能,如TypeScript、路由等\){NC}"
echo -e "\({YELLOW}如果不确定,可直接按Enter选择默认值(No)\){NC}\n"

case $PACKAGE_MANAGER in
npm) npm create vue@latest $project_name ;;
pnpm) pnpm create vue@latest $project_name ;;
yarn)
if yarn --version | grep -q "^1."; then
yarn create vue $project_name
else
yarn create vue@latest $project_name
fi
;;
bun) bun create vue@latest $project_name ;;
esac

安装依赖并启动

echo -e "\n\({BLUE}安装依赖并启动开发服务器...\){NC}"
cd $project_name

case \(PACKAGE_MANAGER in npm) npm install echo -e "\n\){GREEN}✓ 依赖安装完成!\({NC}" echo -e "\){BLUE}启动开发服务器...\({NC}" echo -e "\){YELLOW}您可以按Ctrl+C停止服务器${NC}"
npm run dev -- --host \(NETWORK_HOST ;; pnpm) pnpm install echo -e "\n\){GREEN}✓ 依赖安装完成!\({NC}" echo -e "\){BLUE}启动开发服务器...\({NC}" echo -e "\){YELLOW}您可以按Ctrl+C停止服务器${NC}"
pnpm run dev -- --host \(NETWORK_HOST ;; yarn) yarn echo -e "\n\){GREEN}✓ 依赖安装完成!\({NC}" echo -e "\){BLUE}启动开发服务器...\({NC}" echo -e "\){YELLOW}您可以按Ctrl+C停止服务器${NC}"
yarn dev --host \(NETWORK_HOST ;; bun) bun install echo -e "\n\){GREEN}✓ 依赖安装完成!\({NC}" echo -e "\){BLUE}启动开发服务器...\({NC}" echo -e "\){YELLOW}您可以按Ctrl+C停止服务器${NC}"
bun run dev --host $NETWORK_HOST
;;
esac
}

选项2: 从CDN使用Vue.js

use_vue_from_cdn() {
echo -e "\n\({BLUE}=== 从CDN使用Vue.js ===\){NC}"

read -p "示例文件保存位置 [默认: ./vue-cdn-example]: " output_dir
if [ -z "$output_dir" ]; then
output_dir="./vue-cdn-example"
fi

mkdir -p "$output_dir"

选择API风格

echo -e "\n\({BLUE}选择API风格:\){NC}"
echo "1) 选项式API (Options API)"
echo "2) 组合式API (Composition API)"

read -p "请选择 [1-2]: " api_style

检查网络访问选项

check_network_access

创建HTML文件

if [ "\(api_style" == "1" ]; then cat > "\)output_dir/index.html" << 'EOF'

Vue.js CDN示例 - 选项式API

Vue.js CDN示例 - 选项式API

计数器: {{ count }}


输入内容:



您输入的内容: {{ message }}


EOF else cat > "$output_dir/index.html" << 'EOF' Vue.js CDN示例 - 组合式API

Vue.js CDN示例 - 组合式API

计数器: {{ count }}


输入内容:



您输入的内容: {{ message }}


EOF fi

创建ES Module版本

if [ "\(api_style" == "1" ]; then cat > "\)output_dir/index-esm.html" << 'EOF'

Vue.js ES Module示例 - 选项式API

Vue.js ES Module示例 - 选项式API

计数器: {{ count }}


输入内容:



您输入的内容: {{ message }}


EOF else cat > "$output_dir/index-esm.html" << 'EOF' Vue.js ES Module示例 - 组合式API

Vue.js ES Module示例 - 组合式API

计数器: {{ count }}


输入内容:



您输入的内容: {{ message }}


EOF fi

创建README.md

cat > "$output_dir/README.md" << EOF

Vue.js CDN示例

这个目录包含两个示例文件:

  1. `index.html` - 使用全局构建版Vue.js的基本示例
  2. `index-esm.html` - 使用ES Module构建版Vue.js的示例

如何运行

由于ES模块的安全限制,这些文件需要通过HTTP服务器来访问。

您可以使用以下命令启动一个简单的HTTP服务器:

```bash

如果已安装Node.js

npx serve${NETWORK_HOST == "0.0.0.0" ? " --listen 0.0.0.0" : ""}

或者如果已安装Python

python -m http.server${NETWORK_HOST == "0.0.0.0" ? " --bind 0.0.0.0" : ""}
```

然后在浏览器中访问:\({NETWORK_HOST == "0.0.0.0" ? "\n- http://\)IP_ADDR:5000/index.html\n- http://$IP_ADDR:5000/index-esm.html" : "\n- http://localhost:5000/index.html\n- http://localhost:5000/index-esm.html"}

学习更多

访问 Vue.js官方文档 了解更多信息。
EOF

echo -e "\n${GREEN}✓ 示例文件已创建在 \(output_dir 目录\){NC}"
echo -e "\({YELLOW}请注意: 由于ES模块的安全限制,这些文件需要通过HTTP服务器来访问\){NC}"
echo -e "\({BLUE}您可以运行以下命令启动一个简单的HTTP服务器:\){NC}"

if [ "$NETWORK_HOST" == "0.0.0.0" ]; then
echo -e " cd $output_dir && npx serve --listen 0.0.0.0"
echo -e " 或"
echo -e " cd \(output_dir && python -m http.server --bind 0.0.0.0" echo -e "\){GREEN}服务器启动后可通过 http://\(IP_ADDR:5000 访问\){NC}"
else
echo -e " cd $output_dir && npx serve"
echo -e " 或"
echo -e " cd $output_dir && python -m http.server"
fi

询问是否要启动服务器

read -p "是否现在启动HTTP服务器? (y/n): " start_server
if [[ "\(start_server" =~ ^[Yy]\) ]]; then
cd "\(output_dir" if command -v npx &> /dev/null; then echo -e "\){BLUE}启动HTTP服务器...\({NC}" echo -e "\){YELLOW}按Ctrl+C停止服务器\({NC}" if [ "\)NETWORK_HOST" == "0.0.0.0" ]; then
npx serve --listen 0.0.0.0
else
npx serve
fi
elif command -v python3 &> /dev/null; then
echo -e "\({BLUE}启动HTTP服务器...\){NC}"
echo -e "\({YELLOW}按Ctrl+C停止服务器\){NC}"
if [ "\(NETWORK_HOST" == "0.0.0.0" ]; then python3 -m http.server --bind 0.0.0.0 else python3 -m http.server fi elif command -v python &> /dev/null; then echo -e "\){BLUE}启动HTTP服务器...\({NC}" echo -e "\){YELLOW}按Ctrl+C停止服务器\({NC}" if [ "\)NETWORK_HOST" == "0.0.0.0" ]; then
python -m http.server --bind 0.0.0.0
else
python -m http.server
fi
else
echo -e "\({RED}未找到可用的HTTP服务器工具\){NC}"
echo "请安装Node.js或Python,然后手动启动服务器"
fi
fi
}

选项3: 使用Docker安装Vue.js

use_vue_with_docker() {
echo -e "\n\({BLUE}=== 使用Docker安装Vue.js ===\){NC}"

检查Docker是否已安装

if ! command -v docker &> /dev/null; then
echo -e "\({RED}✗ Docker未安装\){NC}"
echo "请先安装Docker: https://docs.docker.com/get-docker/"
exit 1
fi

if ! command -v docker-compose &> /dev/null; then
echo -e "\({RED}✗ Docker Compose未安装\){NC}"
echo "请先安装Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi

echo -e "\({GREEN}✓ Docker已安装\){NC}"

获取项目目录

read -p "项目目录 [默认: ./vue-docker-project]: " project_dir
if [ -z "$project_dir" ]; then
project_dir="./vue-docker-project"
fi

mkdir -p "$project_dir"

检查网络访问选项

check_network_access

创建Dockerfile

cat > "$project_dir/Dockerfile" << 'EOF'
FROM node:18

WORKDIR /app

RUN npm install -g @vue/cli

EXPOSE 8080
EXPOSE 5173

CMD ["bash"]
EOF

创建docker-compose.yml

cat > "$project_dir/docker-compose.yml" << EOF
version: '3'

services:
vue-app:
build: .
volumes:
- ./:/app
ports:
- "8080:8080"
- "5173:5173"
environment:
- HOST=0.0.0.0
tty: true
stdin_open: true
EOF

创建启动脚本

cat > "$project_dir/create-vue-project.sh" << 'EOF'

!/bin/bash

echo "创建新的Vue.js项目..."
docker-compose run --rm vue-app vue create -y .
docker-compose run --rm vue-app npm install
EOF
chmod +x "$project_dir/create-vue-project.sh"

cat > "$project_dir/start-dev-server.sh" << EOF

!/bin/bash

echo "启动开发服务器..."
docker-compose run --rm --service-ports vue-app npm run serve -- --host \(NETWORK_HOST EOF chmod +x "\)project_dir/start-dev-server.sh"

cat > "$project_dir/build.sh" << 'EOF'

!/bin/bash

echo "构建生产版本..."
docker-compose run --rm vue-app npm run build
EOF
chmod +x "$project_dir/build.sh"

创建README.md

cat > "$project_dir/README.md" << 'EOF'

Vue.js Docker项目

这是一个使用Docker管理Vue.js开发环境的项目。

使用方法

创建Vue.js项目

./create-vue-project.sh

启动开发服务器

./start-dev-server.sh

构建生产版本

./build.sh

访问应用

开发服务器启动后,访问 http://localhost:8080

构建输出

构建后的文件会在 ./dist 目录下
EOF

echo -e "\n${GREEN}✓ Docker项目已创建在 \(project_dir 目录\){NC}"
echo -e "\({BLUE}使用以下命令开始:\){NC}"
echo -e " cd $project_dir"
echo -e " ./create-vue-project.sh"
echo -e " ./start-dev-server.sh"

询问是否现在创建项目

read -p "是否现在创建Vue.js项目? (y/n): " create_now
if [[ "\(create_now" =~ ^[Yy]\) ]]; then
cd "\(project_dir" echo -e "\){BLUE}构建Docker镜像...${NC}"
docker-compose build

echo -e "\({BLUE}创建Vue.js项目...\){NC}"
./create-vue-project.sh

echo -e "\({BLUE}启动开发服务器...\){NC}"
echo -e "\({YELLOW}按Ctrl+C停止服务器\){NC}"
./start-dev-server.sh
fi
}

选项4: 创建单页面示例

create_vue_sample() {
echo -e "\n\({BLUE}=== 创建Vue.js单页面示例 ===\){NC}"

read -p "保存位置 [默认: ./vue-sample.html]: " output_file
if [ -z "$output_file" ]; then
output_file="./vue-sample.html"
fi

检查网络访问选项

check_network_access

cat > "$output_file" << 'EOF'

Vue.js 单页面示例

Vue.js 单页面示例

待办事项




{{ todo.text }}


没有待办事项


<input
type="text"
v-model="newTodo"
@keyup.enter="addTodo"
placeholder="添加新的待办事项..."
>
<button @click="addTodo">添加


<button
@click="currentFilter = 'all'"
:class="{ active: currentFilter === 'all' }"
>
全部

<button
@click="currentFilter = 'active'"
:class="{ active: currentFilter === 'active' }"
>
未完成

<button
@click="currentFilter = 'completed'"
:class="{ active: currentFilter === 'completed' }"
>
已完成




计数器


当前计数: {{ count }}


<button @click="count++">+1
<button @click="count--">-1


Vue.js基础语法示例

文本绑定


{{ message }}


条件渲染


<button @click="toggleVisible">{{ isVisible ? '隐藏' : '显示' }}

现在你看到我了!

列表渲染




  • {{ item }}

事件处理


<button @click="sayHello">点击我

EOF

echo -e "\n${GREEN}✓ Vue.js单页面示例已创建: \(output_file\){NC}"
echo -e "\({BLUE}您可以在浏览器中直接打开此文件来查看效果\){NC}"

询问是否在浏览器中打开或启动服务器

echo -e "\n\({BLUE}如何打开文件:\){NC}"
echo "1) 直接在浏览器中打开 (仅支持简单功能)"
echo "2) 使用HTTP服务器打开 (完全功能支持)"

read -p "请选择 [1-2]: " open_method

if [ "\(open_method" == "2" ]; then # 获取文件目录 file_dir=\)(dirname "$output_file")

echo -e "\({BLUE}启动HTTP服务器...\){NC}"
if command -v npx &> /dev/null; then
cd "\(file_dir" echo -e "\){YELLOW}按Ctrl+C停止服务器\({NC}" if [ "\)NETWORK_HOST" == "0.0.0.0" ]; then
echo -e "\({GREEN}可以通过 http://\)IP_ADDR:5000/\((basename "\)output_file") 访问\({NC}" npx serve --listen 0.0.0.0 else echo -e "\){GREEN}可以通过 http://localhost:5000/\((basename "\)output_file") 访问\({NC}" npx serve fi elif command -v python3 &> /dev/null; then cd "\)file_dir"
echo -e "\({YELLOW}按Ctrl+C停止服务器\){NC}"
if [ "\(NETWORK_HOST" == "0.0.0.0" ]; then echo -e "\){GREEN}可以通过 http://\(IP_ADDR:8000/\)(basename "\(output_file") 访问\){NC}"
python3 -m http.server --bind 0.0.0.0
else
echo -e "\({GREEN}可以通过 http://localhost:8000/\)(basename "\(output_file") 访问\){NC}"
python3 -m http.server
fi
elif command -v python &> /dev/null; then
cd "\(file_dir" echo -e "\){YELLOW}按Ctrl+C停止服务器\({NC}" if [ "\)NETWORK_HOST" == "0.0.0.0" ]; then
echo -e "\({GREEN}可以通过 http://\)IP_ADDR:8000/\((basename "\)output_file") 访问\({NC}" python -m http.server --bind 0.0.0.0 else echo -e "\){GREEN}可以通过 http://localhost:8000/\((basename "\)output_file") 访问\({NC}" python -m http.server fi else echo -e "\){RED}未找到可用的HTTP服务器工具\({NC}" echo "请安装Node.js或Python,然后手动启动服务器" fi elif command -v xdg-open &> /dev/null; then read -p "是否在浏览器中打开? (y/n): " open_browser if [[ "\)open_browser" =~ [1]$ ]]; then
xdg-open "\(output_file" fi elif command -v open &> /dev/null; then read -p "是否在浏览器中打开? (y/n): " open_browser if [[ "\)open_browser" =~ [2]$ ]]; then
open "$output_file"
fi
fi
}

主程序

main() {

检查包管理器

check_package_manager

显示安装选项

show_options

echo -e "\n\({GREEN}安装完成!\){NC}"
echo -e "\({BLUE}访问 https://vuejs.org/guide/introduction.html 了解更多信息\){NC}"
}

执行主程序

main


  1. Yy ↩︎

  2. Yy ↩︎

posted @ 2025-05-06 09:06  昆仑葫芦  阅读(36)  评论(0)    收藏  举报