62
.github/workflows/release.yml
vendored
Normal file
62
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
name: Build and Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '22.x'
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Build for production
|
||||
run: pnpm build
|
||||
|
||||
- name: Build for file protocol
|
||||
run: pnpm build:file
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
mv dist dist-prod
|
||||
mv dist-prod/index.html dist-prod/404.html
|
||||
|
||||
- name: Create production build archive
|
||||
run: |
|
||||
tar -czf dist.tar.gz dist-prod
|
||||
|
||||
- name: Create file protocol build archive
|
||||
run: |
|
||||
tar -czf dist-file.tar.gz dist-file
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
dist.tar.gz
|
||||
dist-file.tar.gz
|
||||
draft: true
|
||||
prerelease: false
|
||||
generate_release_notes: true
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "log-lottery",
|
||||
"private": true,
|
||||
"version": "0.0.3",
|
||||
"version": "0.0.4",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@@ -83,4 +83,4 @@
|
||||
"vitest": "^2.1.5",
|
||||
"vue-tsc": "^2.1.10"
|
||||
}
|
||||
}
|
||||
}
|
||||
1
src/components.d.ts
vendored
1
src/components.d.ts
vendored
@@ -2,6 +2,7 @@
|
||||
// @ts-nocheck
|
||||
// Generated by unplugin-vue-components
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
// biome-ignore lint: disable
|
||||
export {}
|
||||
|
||||
/* prettier-ignore */
|
||||
|
||||
243
vite.config.ts
243
vite.config.ts
@@ -19,132 +19,133 @@ const require = createRequire(import.meta.url)
|
||||
const process = require('node:process')
|
||||
|
||||
export default defineConfig(({ mode }) => {
|
||||
const env = loadEnv(mode, __dirname)
|
||||
const chunkName = mode === 'prebuild' ? '[name]' : 'chunk'
|
||||
const env = loadEnv(mode, __dirname)
|
||||
const chunkName = mode === 'prebuild' ? '[name]' : 'chunk'
|
||||
|
||||
return {
|
||||
base: mode === 'file' ? './' : '/log-lottery/',
|
||||
plugins: [
|
||||
vue(),
|
||||
mode === 'file'
|
||||
? legacy({
|
||||
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
|
||||
})
|
||||
: null,
|
||||
// vueDevTools(),
|
||||
viteCompression({
|
||||
verbose: true,
|
||||
disable: false,
|
||||
threshold: 10240,
|
||||
algorithm: 'gzip',
|
||||
ext: '.gz',
|
||||
}),
|
||||
visualizer({
|
||||
emitFile: true, // 是否被触摸
|
||||
filename: 'test.html', // 生成分析网页文件名
|
||||
open: true, // 在默认用户代理中打开生成的文件
|
||||
gzipSize: true, // 从源代码中收集 gzip 大小并将其显示在图表中
|
||||
brotliSize: true, // 从源代码中收集 brotli 大小并将其显示在图表中
|
||||
}),
|
||||
return {
|
||||
base: mode === 'file' ? './' : '/log-lottery/',
|
||||
plugins: [
|
||||
vue(),
|
||||
mode === 'file'
|
||||
? legacy({
|
||||
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
|
||||
})
|
||||
: null,
|
||||
// vueDevTools(),
|
||||
viteCompression({
|
||||
verbose: true,
|
||||
disable: false,
|
||||
threshold: 10240,
|
||||
algorithm: 'gzip',
|
||||
ext: '.gz',
|
||||
}),
|
||||
visualizer({
|
||||
emitFile: true, // 是否被触摸
|
||||
filename: 'test.html', // 生成分析网页文件名
|
||||
open: true, // 在默认用户代理中打开生成的文件
|
||||
gzipSize: true, // 从源代码中收集 gzip 大小并将其显示在图表中
|
||||
brotliSize: true, // 从源代码中收集 brotli 大小并将其显示在图表中
|
||||
}),
|
||||
|
||||
createSvgIconsPlugin({
|
||||
// 指定需要缓存的图标文件夹
|
||||
iconDirs: [path.resolve(process.cwd(), 'src/icons')],
|
||||
// 指定symbolId格式
|
||||
symbolId: 'icon-[dir]-[name]',
|
||||
}),
|
||||
AutoImport({
|
||||
resolvers: [
|
||||
// 自动导入图标组件
|
||||
IconsResolver({
|
||||
prefix: 'Icon',
|
||||
}),
|
||||
createSvgIconsPlugin({
|
||||
// 指定需要缓存的图标文件夹
|
||||
iconDirs: [path.resolve(process.cwd(), 'src/icons')],
|
||||
// 指定symbolId格式
|
||||
symbolId: 'icon-[dir]-[name]',
|
||||
}),
|
||||
AutoImport({
|
||||
resolvers: [
|
||||
// 自动导入图标组件
|
||||
IconsResolver({
|
||||
prefix: 'Icon',
|
||||
}),
|
||||
],
|
||||
dts: path.resolve(path.resolve(__dirname, 'src'), 'auto-imports.d.ts'),
|
||||
}),
|
||||
Components({
|
||||
resolvers: [
|
||||
// 自动注册图标组件
|
||||
IconsResolver({
|
||||
enabledCollections: ['ep'],
|
||||
}),
|
||||
],
|
||||
dts: path.resolve(path.resolve(__dirname, 'src'), 'components.d.ts'),
|
||||
}),
|
||||
Icons({
|
||||
autoInstall: true,
|
||||
}),
|
||||
],
|
||||
dts: path.resolve(path.resolve(__dirname, 'src'), 'auto-imports.d.ts'),
|
||||
}),
|
||||
Components({
|
||||
resolvers: [
|
||||
// 自动注册图标组件
|
||||
IconsResolver({
|
||||
enabledCollections: ['ep'],
|
||||
}),
|
||||
],
|
||||
dts: path.resolve(path.resolve(__dirname, 'src'), 'components.d.ts'),
|
||||
}),
|
||||
Icons({
|
||||
autoInstall: true,
|
||||
}),
|
||||
],
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
scss: {
|
||||
additionalData: '@use "@/style/global.scss" as *;',
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
scss: {
|
||||
additionalData: '@use "@/style/global.scss" as *;',
|
||||
},
|
||||
},
|
||||
// postcss: {
|
||||
// plugins: [
|
||||
// require('tailwindcss'),
|
||||
// require('autoprefixer'),
|
||||
// ]
|
||||
// }
|
||||
},
|
||||
},
|
||||
// postcss: {
|
||||
// plugins: [
|
||||
// require('tailwindcss'),
|
||||
// require('autoprefixer'),
|
||||
// ]
|
||||
// }
|
||||
},
|
||||
server: {
|
||||
host: 'localhost',
|
||||
port: 6719,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: env.VITE_BASE_URL,
|
||||
// 是否跨域
|
||||
changeOrigin: true,
|
||||
// 路径重写
|
||||
rewrite: path => path.replace(/^\/api/, ''),
|
||||
server: {
|
||||
host: 'localhost',
|
||||
port: 6719,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: env.VITE_BASE_URL,
|
||||
// 是否跨域
|
||||
changeOrigin: true,
|
||||
// 路径重写
|
||||
rewrite: path => path.replace(/^\/api/, ''),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
},
|
||||
},
|
||||
build: {
|
||||
minify: 'terser',
|
||||
terserOptions: {
|
||||
compress: {
|
||||
// 生产环境时移除console
|
||||
drop_console: true,
|
||||
drop_debugger: true,
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
},
|
||||
},
|
||||
},
|
||||
// 关闭文件计算
|
||||
reportCompressedSize: false,
|
||||
// 关闭生成map文件 可以达到缩小打包体积
|
||||
sourcemap: false, // 这个生产环境一定要关闭,不然打包的产物会很大
|
||||
rollupOptions: {
|
||||
output: {
|
||||
chunkFileNames: `js/${chunkName}-[hash].js`, // 引入文件名的名称
|
||||
entryFileNames: `js/${chunkName}-[hash].js`, // 包的入口文件名称
|
||||
assetFileNames: `[ext]/${chunkName}-[hash].[ext]`, // 资源文件像 字体,图片等
|
||||
manualChunks(id: any): string {
|
||||
if (id.includes('node_modules')) {
|
||||
return id
|
||||
.toString()
|
||||
.split('node_modules/')[1]
|
||||
.split('/')[0]
|
||||
.toString()
|
||||
}
|
||||
},
|
||||
build: {
|
||||
outDir: mode === 'file' ? 'dist-file' : 'dist',
|
||||
minify: 'terser',
|
||||
terserOptions: {
|
||||
compress: {
|
||||
// 生产环境时移除console
|
||||
drop_console: true,
|
||||
drop_debugger: true,
|
||||
},
|
||||
},
|
||||
// 关闭文件计算
|
||||
reportCompressedSize: false,
|
||||
// 关闭生成map文件 可以达到缩小打包体积
|
||||
sourcemap: false, // 这个生产环境一定要关闭,不然打包的产物会很大
|
||||
rollupOptions: {
|
||||
output: {
|
||||
chunkFileNames: `js/${chunkName}-[hash].js`, // 引入文件名的名称
|
||||
entryFileNames: `js/${chunkName}-[hash].js`, // 包的入口文件名称
|
||||
assetFileNames: `[ext]/${chunkName}-[hash].[ext]`, // 资源文件像 字体,图片等
|
||||
manualChunks(id: any): string {
|
||||
if (id.includes('node_modules')) {
|
||||
return id
|
||||
.toString()
|
||||
.split('node_modules/')[1]
|
||||
.split('/')[0]
|
||||
.toString()
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
// 使用这个必须在上面加/// <reference types="vitest" /> 不然会有类型报错
|
||||
test: {
|
||||
globals: true, // --> 0.8.1+ 请修改成globals
|
||||
environment: 'jsdom',
|
||||
// include: ['**/__tests__/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
// passWithNoTests: true,
|
||||
transformMode: {
|
||||
web: [/\.[jt]sx$/],
|
||||
},
|
||||
},
|
||||
}
|
||||
// 使用这个必须在上面加/// <reference types="vitest" /> 不然会有类型报错
|
||||
test: {
|
||||
globals: true, // --> 0.8.1+ 请修改成globals
|
||||
environment: 'jsdom',
|
||||
// include: ['**/__tests__/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
// passWithNoTests: true,
|
||||
transformMode: {
|
||||
web: [/\.[jt]sx$/],
|
||||
},
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user