基于 Docker 构建统一的 Vue 开发环境,运行后组件版本如下

# /app # npm -v
# 10.8.2
# /app # pnpm -v
# 9.14.2
# /app # node -v
# v22.6.0
# /app # yarn -v
# 1.22.22
# /app # vue -V
# @vue/cli 5.0.8
# /app # create-vue --version
# 全局安装 xxx
# npm i -g pnpm | npm i -g vite | npm i -g typescript
# 查看某环境(node npm pnpm yarn nvm, vite 等)
# xxx -v | node -v | npm -v | pnpm -v | pnpm -v | vite -v | yarn -v | tsc -v
# nvm / n node 版本管理工具

Dockerfile 文件

FROM node:22.6-alpine

# timezone
ENV TZ=Asia/Shanghai
# tzdata
RUN set -eux && apk update && apk add tzdata && \
    # 设置时区为上海
    ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && \
    echo "${TZ}" > /etc/timezone && \
    # 清理 APK 缓存和安装包索引
    apk cache clean && rm -rf /var/cache/apk/*
# npm
RUN npm install -g [email protected] && npm i -g pnpm
EXPOSE 5173
WORKDIR /app
# source
#COPY . /app
#RUN cd /app && npm install
CMD ["npm", "run", "dev"]

构建镜像

# 构建镜像
docker build -f Dockerfile -t node:22.6-alpine-v20241124 .
# 运行项目
docker run -it --name=yynode --rm -p=8034:5173 -v=$(pwd):/app node:22.6-alpine-v20241124
# 运行 sleep infinity 挂起,初始项目
docker run -it --name=yynode --rm -p=8034:5173 -v=$(pwd):/app node:22.6-alpine-v20241124 sleep infinity
# 运行 npm run dev
docker run -it --name=yynode --rm -p=8034:5173 -v=$(pwd):/app node:22.6-alpine-v20241124 npm run dev
docker exec -it yynode /bin/sh
docker stop yynode

初始项目

# /app 为根目录创建项目
npm create [email protected] /app
# npm 淘宝镜像源
npm config set registry https://registry.npmmirror.com
npm config list
npm install
npm run dev
npm run build
# http://192.168.0.119:8034/server/

项目配置

// https://vitejs.dev/config/
export default defineConfig({
  base: '/server/', // 部署二级目录
  plugins: [
    vue(),
    vueJsx(),
  ],
  server: {
    port: 5173, // 指定端口
    host: '0.0.0.0', // 一定要写这个,不然宿主机 5173 端口会打不开站点
    cors: true
  }
})

1. 二级目录

更改 vite.config.ts 文件,base: '' 改为 base: '/server/'

这样访问地址有 http://192.168.0.119:8034 改为 http://192.168.0.119:8034/server/

2. 端口监听

更改 vite.config.ts 文件,监听主机为 host: '0.0.0.0'

3. 开发环境

根目录增加 .env 区分开发环境和正式环境,配置文件

# .env
# .env.development
# 定义环境变量 需要 VITE 开头
VITE_ENV='development'
# 接口地址(proxy 这里是关键)
VITE_APP_BASE_API='' 

#.env.production
# 定义环境变量 需要 VITE 开头
VITE_ENV='production'
# 接口地址
VITE_APP_BASE_API='https://tools.196000.xyz'

更改 package.json 构建命令,增加 NODE_ENV=production

环境变量使用 import.meta.env.VITE_XXX 引用

# src/main.ts
if (import.meta.env.VITE_ENV === "development") {
    //console.log("当前处于开发环境");
}
if (import.meta.env.VITE_ENV === "production") {
    //console.log("当前处于生产环境");
}

4. Proxy

// Index.vue
const fetchData = async () => {
  // 设置 Axios 的基础 URL
  axios.defaults.baseURL = import.meta.env.VITE_APP_BASE_API;
  axios
    .get("/api.php?c=api&a=server", {
      baseURL: import.meta.env.VITE_APP_BASE_API, // api 的 base_url
      timeout: 5000,
      headers: {
        Authorization: "1T7QTw192ZrgpT3bnYCp64qj2oSeXQSC",
      },
    })
    .then((response) => {
      //console.log(response);
      data.value = response.data;
    })
    .catch((error) => {
      //console.log(error);
      errored.value = true;
    })
    .finally(() => (loading.value = false));
}

onMounted(() => {
  fetchData();
});

// vite.config.ts
export default defineConfig({
  server: {
    proxy: {
      '^/api.php': {
        target: 'http://192.168.0.114:9001',// 对面接口
        changeOrigin: true,
        rewrite: (path) => path.replace('/api.php', '/dodo/mjjs/api.php')
      }
    }
  }
})

插件安装

  • Vue.js devtools Chrome devtools extension for debugging Vue.js applications https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd
  • Vue - Official VSCode extension for language support for Vue https://marketplace.visualstudio.com/items?itemName=Vue.volar

附直接安装

# 1
# debian 11 系统 apt install nodejs 默认安装的 node 版本是 v12.22.12
apt install nodejs npm -y
# 使用 nvm 安装 v23.3.0 版本
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nvm install 23
nvm use 23
node -v
npm -v

# 2 nodejs 相关环境
# 查看版本 https://nodejs.org/zh-cn/about/previous-releases
nodejs_version=${nodejs_version:-23.6.0}
cd /usr/local/lib
wget https://nodejs.org/dist/v$nodejs_version/node-v$nodejs_version-linux-x64.tar.xz
tar -xvf node-v$nodejs_version-linux-x64.tar.xz
ln -s /usr/local/lib/node-v$nodejs_version-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/lib/node-v$nodejs_version-linux-x64/bin/npm /usr/local/bin/npm
ln -s /usr/local/lib/node-v$nodejs_version-linux-x64/bin/npx /usr/local/bin/npx

# sh: 1: vite: not found
node -v
which vite
# 全局安装
npm i -g vite
# 本地安装
npm install vite --save-dev
# -D 是 --save-dev 的简写,它表示将依赖项安装为 开发依赖
npm i vite@latest -D
# 临时下载并运行
npx vite
# npm WARN EBADENGINE Unsupported engine {
# npm WARN EBADENGINE   package: '[email protected]',
# npm WARN EBADENGINE   required: { node: '^18.0.0 || ^20.0.0 || >=22.0.0' },
# npm WARN EBADENGINE   current: { node: 'v12.22.12', npm: '7.5.2' }
# npm WARN EBADENGINE }
# node -v
# v12.22.12