Commit 57691e03 by zhangxingmin

push

parent 3a3f70b9
FROM node:18-alpine AS builder # 使用更新的基础镜像 (Debian bullseye)
FROM docker.m.daocloud.io/library/node:16-bullseye AS build
# 设置环境变量
ENV npm_config_canvas_binary_host_mirror="https://npmmirror.com/mirrors/canvas"
ENV npm_config_sharp_binary_host="https://npmmirror.com/mirrors/sharp"
ENV npm_config_sharp_libvips_binary_host="https://npmmirror.com/mirrors/sharp-libvips"
# 添加 esbuild 镜像源
ENV ESBUILD_BINARY_HOST="https://npmmirror.com/mirrors/esbuild"
# 安装系统依赖 (使用阿里云镜像源)
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
apt-get update && apt-get install -y --no-install-recommends \
build-essential \
python3 \
pkg-config \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
libvips-dev \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app WORKDIR /app
COPY package*.json ./
# 设置淘宝镜像源并安装 # 复制包管理文件
RUN npm config set registry https://registry.npmmirror.com && \ COPY package.json package-lock.json ./
npm ci --prefer-offline
COPY . . # 1. 显式安装 esbuild 二进制
RUN npm run build:h5 RUN npm install @esbuild/linux-x64 --verbose --registry=https://registry.npmmirror.com
# 2. 安装其他原生模块
RUN npm install canvas@2.11.2 --verbose --ignore-scripts
RUN npm install sharp@0.32.6 --verbose --ignore-scripts
# 使用Nginx作为运行环境 # 3. 安装项目依赖(移除 --no-optional)
FROM nginx:alpine RUN npm install --verbose --registry=https://registry.npmmirror.com
# 复制打包结果到Nginx默认目录 # 4. 验证 esbuild 安装
COPY --from=builder /app/dist/build/h5 /usr/share/nginx/html RUN ls -la node_modules/esbuild/bin && \
./node_modules/.bin/esbuild --version
# 配置Nginx # 复制源码并构建
COPY . .
RUN npm run build:test
# 生产阶段
FROM docker.m.daocloud.io/library/nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf
# 设置时区
RUN echo "https://mirrors.aliyun.com/alpine/v3.22/main/" > /etc/apk/repositories && \
echo "https://mirrors.aliyun.com/alpine/v3.22/community/" >> /etc/apk/repositories && \
apk update && \
apk add --no-cache tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8333 EXPOSE 8333
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]
...@@ -16,22 +16,76 @@ ...@@ -16,22 +16,76 @@
] ]
}, },
"scripts": { "scripts": {
"build:h5": "uni build -p h5" "dev": "vite",
"build": "vite build",
"test": "vite --mode=test",
"build:dev": "vite build --mode=development",
"build:test": "vite build --mode=test",
"preview": "vite preview",
"report": "npm run build --report"
}, },
"dependencies": { "dependencies": {
"crypto-js": "^4.2.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"echarts": "^5.4.1",
"js-sha256": "^0.11.1", "js-sha256": "^0.11.1",
"nanoid": "^4.0.0" "nanoid": "^4.0.0",
"@element-plus/icons-vue": "^2.1.0",
"@vuemap/vue-amap": "^2.0.10",
"@vueup/vue-quill": "^1.1.1",
"@vueuse/core": "^10.4.1",
"ali-oss": "^6.17.1",
"awesome-qr": "^2.1.5-rc.0",
"axios": "^1.4.0",
"benz-amr-recorder": "^1.1.5",
"clipboard": "^2.0.11",
"core-js": "^3.30.1",
"cos-js-sdk-v5": "^1.4.17",
"crypto-js": "^4.1.1",
"driver.js": "^0.9.8",
"echarts": "^5.4.2",
"element-plus": "^2.5.6",
"fabric": "^5.3.0",
"file-saver": "^2.0.5",
"fuse.js": "^6.6.2",
"js-beautify": "^1.14.7",
"js-cookie": "^3.0.5",
"jsencrypt": "^3.3.2",
"lodash.merge": "^4.6.2",
"moment": "^2.29.4",
"mp4box": "^0.5.2",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"pinia": "^2.0.32",
"qiankun": "^2.10.8",
"qrcode": "^1.5.3",
"quill-image-resize-module": "^3.0.0",
"screenfull": "^6.0.2",
"sortablejs": "^1.15.0",
"uuid": "^9.0.0",
"vant": "^4.3.2",
"vite-plugin-svg-icons": "^2.0.1",
"vue": "^3.2.47",
"vue-cropper": "^1.0.8",
"vue-router": "^4.1.6",
"vue3-count-to": "^1.1.2",
"vuedraggable": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@dcloudio/uni-h5": "3.0.0-alpha-3070320211214001", "less": "^4.3.0",
"@dcloudio/vue-cli-plugin-uni": "2.0.0-3070320211214001", "@vitejs/plugin-vue": "^4.0.0",
"@dcloudio/uni-migration": "2.0.0-3070320211214001", "@vitejs/plugin-vue-jsx": "^3.0.1",
"less": "^4.3.0" "@vue/babel-plugin-jsx": "^1.1.1",
}, "@vue/compat": "^3.2.47",
"engines": { "rollup-plugin-visualizer": "^5.9.2",
"node": ">=16.0.0" "sass": "^1.62.1",
"sharp": "^0.32.4",
"terser": "^5.17.7",
"unplugin-auto-import": "^0.15.3",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.1.4",
"vite-plugin-cdn-import": "^0.3.5",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-image-optimizer": "^1.1.6",
"vite-plugin-require-transform": "^1.0.12"
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment