hookehuyr

build: 将开发服务器端口设置为随机可用端口

避免端口冲突,提升开发体验。原先的 VITE_PORT 环境变量配置被注释,改为使用端口 0 让系统自动分配。
...@@ -8,16 +8,16 @@ ...@@ -8,16 +8,16 @@
8 import { defineConfig, loadEnv } from 'vite' 8 import { defineConfig, loadEnv } from 'vite'
9 import vue from '@vitejs/plugin-vue' 9 import vue from '@vitejs/plugin-vue'
10 import vueJsx from '@vitejs/plugin-vue-jsx' 10 import vueJsx from '@vitejs/plugin-vue-jsx'
11 -import path from "path" 11 +import path from 'path'
12 import Components from 'unplugin-vue-components/vite' 12 import Components from 'unplugin-vue-components/vite'
13 import AutoImport from 'unplugin-auto-import/vite' 13 import AutoImport from 'unplugin-auto-import/vite'
14 import { VantResolver } from 'unplugin-vue-components/resolvers' 14 import { VantResolver } from 'unplugin-vue-components/resolvers'
15 import { createProxy } from './build/proxy' 15 import { createProxy } from './build/proxy'
16 16
17 export default ({ mode }) => { 17 export default ({ mode }) => {
18 - const root = process.cwd(); 18 + const root = process.cwd()
19 19
20 - const viteEnv = loadEnv(mode, root); 20 + const viteEnv = loadEnv(mode, root)
21 // let isProd = (command === 'serve'); // 情景配置是否为开发模式 serve 或 build 21 // let isProd = (command === 'serve'); // 情景配置是否为开发模式 serve 或 build
22 22
23 return defineConfig({ 23 return defineConfig({
...@@ -36,8 +36,8 @@ export default ({ mode }) => { ...@@ -36,8 +36,8 @@ export default ({ mode }) => {
36 dts: 'src/auto-imports.d.ts', 36 dts: 'src/auto-imports.d.ts',
37 // 解决eslint报错问题 37 // 解决eslint报错问题
38 eslintrc: { 38 eslintrc: {
39 - enabled: true 39 + enabled: true,
40 - } 40 + },
41 }), 41 }),
42 Components({ 42 Components({
43 resolvers: [VantResolver()], 43 resolvers: [VantResolver()],
...@@ -47,18 +47,19 @@ export default ({ mode }) => { ...@@ -47,18 +47,19 @@ export default ({ mode }) => {
47 publicDir: 'public', // 作为静态资源服务的文件夹。这个目录中的文件会在开发中被服务于 /,在开发模式时,会被拷贝到 outDir 的根目录,并没有转换,永远只是复制到这里。该值可以是文件系统的绝对路径,也可以是相对于项目的根目录路径。 47 publicDir: 'public', // 作为静态资源服务的文件夹。这个目录中的文件会在开发中被服务于 /,在开发模式时,会被拷贝到 outDir 的根目录,并没有转换,永远只是复制到这里。该值可以是文件系统的绝对路径,也可以是相对于项目的根目录路径。
48 // cacheDir: '', // 存储缓存文件的目录。此目录下会存储预打包的依赖项或 vite 生成的某些缓存文件,使用缓存可以提高性能。如需重新生成缓存文件,你可以使用 --force 命令行选项或手动删除目录。此选项的值可以是文件的绝对路径,也可以是以项目根目录为基准的相对路径。 48 // cacheDir: '', // 存储缓存文件的目录。此目录下会存储预打包的依赖项或 vite 生成的某些缓存文件,使用缓存可以提高性能。如需重新生成缓存文件,你可以使用 --force 命令行选项或手动删除目录。此选项的值可以是文件的绝对路径,也可以是以项目根目录为基准的相对路径。
49 resolve: { 49 resolve: {
50 - alias: { // 将会被传递到 @rollup/plugin-alias 作为 entries 的选项。也可以是一个对象,或一个 { find, replacement } 的数组. 当使用文件系统路径的别名时,请始终使用绝对路径。相对路径的别名值会被原封不动地使用,因此无法被正常解析。 更高级的自定义解析方法可以通过 插件 实现。 50 + alias: {
51 - "@root": path.resolve(__dirname), 51 + // 将会被传递到 @rollup/plugin-alias 作为 entries 的选项。也可以是一个对象,或一个 { find, replacement } 的数组. 当使用文件系统路径的别名时,请始终使用绝对路径。相对路径的别名值会被原封不动地使用,因此无法被正常解析。 更高级的自定义解析方法可以通过 插件 实现。
52 - "@": path.resolve(__dirname, "src"), 52 + '@root': path.resolve(__dirname),
53 - "@components": path.resolve(__dirname, "src/components"), 53 + '@': path.resolve(__dirname, 'src'),
54 - "@composables": path.resolve(__dirname, "src/composables"), 54 + '@components': path.resolve(__dirname, 'src/components'),
55 - "@utils": path.resolve(__dirname, "src/utils"), 55 + '@composables': path.resolve(__dirname, 'src/composables'),
56 - "@images": path.resolve(__dirname, "src/assets/images"), 56 + '@utils': path.resolve(__dirname, 'src/utils'),
57 - "@css": path.resolve(__dirname, "src/assets/css"), 57 + '@images': path.resolve(__dirname, 'src/assets/images'),
58 - "@mock": path.resolve(__dirname, "src/assets/mock"), 58 + '@css': path.resolve(__dirname, 'src/assets/css'),
59 - "common": path.resolve(__dirname, "src/common"), 59 + '@mock': path.resolve(__dirname, 'src/assets/mock'),
60 - "@api": path.resolve(__dirname, "src/api"), 60 + common: path.resolve(__dirname, 'src/common'),
61 - "Qs": "qs", 61 + '@api': path.resolve(__dirname, 'src/api'),
62 + Qs: 'qs',
62 }, 63 },
63 dedupe: ['vue'], // 如果你在你的应用程序中有相同依赖的副本(比如 monorepos),使用这个选项来强制 Vite 总是将列出的依赖关系解析到相同的副本(从项目根目录)。 64 dedupe: ['vue'], // 如果你在你的应用程序中有相同依赖的副本(比如 monorepos),使用这个选项来强制 Vite 总是将列出的依赖关系解析到相同的副本(从项目根目录)。
64 // conditions: [''], // 在解析包的 情景导出 时允许的附加条件。 65 // conditions: [''], // 在解析包的 情景导出 时允许的附加条件。
...@@ -72,7 +73,7 @@ export default ({ mode }) => { ...@@ -72,7 +73,7 @@ export default ({ mode }) => {
72 // javascriptEnabled: true, 73 // javascriptEnabled: true,
73 // additionalData: `@import "${path.resolve(__dirname, 'src/assets/styles/base.less')}";` 74 // additionalData: `@import "${path.resolve(__dirname, 'src/assets/styles/base.less')}";`
74 // } 75 // }
75 - } // 指定传递给 CSS 预处理器的选项。 76 + }, // 指定传递给 CSS 预处理器的选项。
76 }, 77 },
77 // json: { 78 // json: {
78 // namedExports: true, // 是否支持从 .json 文件中进行按名导入。 79 // namedExports: true, // 是否支持从 .json 文件中进行按名导入。
...@@ -84,7 +85,8 @@ export default ({ mode }) => { ...@@ -84,7 +85,8 @@ export default ({ mode }) => {
84 // clearScreen: true, // 设为 false 可以避免 Vite 清屏而错过在终端中打印某些关键信息。命令行模式下请通过 --clearScreen false 设置。 85 // clearScreen: true, // 设为 false 可以避免 Vite 清屏而错过在终端中打印某些关键信息。命令行模式下请通过 --clearScreen false 设置。
85 server: { 86 server: {
86 host: '0.0.0.0', 87 host: '0.0.0.0',
87 - port: viteEnv.VITE_PORT, // 本地服务端口 88 + // port: viteEnv.VITE_PORT, // 本地服务端口
89 + port: 0, // 使用随机可用端口
88 // strictPort: true, // 设为true时若端口已被占用则会直接退出, 而不是尝试下一个可用端口 90 // strictPort: true, // 设为true时若端口已被占用则会直接退出, 而不是尝试下一个可用端口
89 // https: '', 91 // https: '',
90 // open: false, // 在服务器启动时自动在浏览器中打开应用程序. 当此值为字符串时, 会被当作URL的路径名. 92 // open: false, // 在服务器启动时自动在浏览器中打开应用程序. 当此值为字符串时, 会被当作URL的路径名.
...@@ -111,17 +113,23 @@ export default ({ mode }) => { ...@@ -111,17 +113,23 @@ export default ({ mode }) => {
111 chunkFileNames: 'static/js/[name]-[hash].js', 113 chunkFileNames: 'static/js/[name]-[hash].js',
112 entryFileNames: 'static/js/[name]-[hash].js', 114 entryFileNames: 'static/js/[name]-[hash].js',
113 assetFileNames: 'static/[ext]/[name]-[hash].[ext]', 115 assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
114 - manualChunks: (id) => { 116 + manualChunks: id => {
115 - if (!id.includes('node_modules')) return; 117 + if (!id.includes('node_modules')) return
116 - if (id.includes('@vue-office/docx') || id.includes('@vue-office/excel') || id.includes('@vue-office/pptx')) return 'vue-office'; 118 + if (
117 - if (id.includes('html2canvas') || id.includes('html-to-image')) return 'image-tools'; 119 + id.includes('@vue-office/docx') ||
120 + id.includes('@vue-office/excel') ||
121 + id.includes('@vue-office/pptx')
122 + )
123 + return 'vue-office'
124 + if (id.includes('html2canvas') || id.includes('html-to-image')) return 'image-tools'
118 }, 125 },
119 }, 126 },
120 - input: { // 多页面应用模式, 打包时配置,运行配置要处理root 127 + input: {
128 + // 多页面应用模式, 打包时配置,运行配置要处理root
121 main: path.resolve(__dirname, 'index.html'), 129 main: path.resolve(__dirname, 'index.html'),
122 // mono1: path.resolve(__dirname, 'src/packages/mono1/index.html'), 130 // mono1: path.resolve(__dirname, 'src/packages/mono1/index.html'),
123 // mono2: path.resolve(__dirname, 'src/packages/mono2/index.html'), 131 // mono2: path.resolve(__dirname, 'src/packages/mono2/index.html'),
124 - } 132 + },
125 }, 133 },
126 }, 134 },
127 optimizeDeps: { 135 optimizeDeps: {
...@@ -129,6 +137,6 @@ export default ({ mode }) => { ...@@ -129,6 +137,6 @@ export default ({ mode }) => {
129 // exclude: [], 137 // exclude: [],
130 include: ['jquery', 'moment', 'axios', 'pinia', 'vue-router', 'vant'], // 默认情况下,不在 node_modules 中的,链接的包不会被预构建。使用此选项可强制预构建链接的包。 138 include: ['jquery', 'moment', 'axios', 'pinia', 'vue-router', 'vant'], // 默认情况下,不在 node_modules 中的,链接的包不会被预构建。使用此选项可强制预构建链接的包。
131 // keepNames: false, // 打包器有时需要重命名符号以避免冲突。 设置此项为 true 可以在函数和类上保留 name 属性。 若想获取更多详情,请参阅 keepNames 139 // keepNames: false, // 打包器有时需要重命名符号以避免冲突。 设置此项为 true 可以在函数和类上保留 name 属性。 若想获取更多详情,请参阅 keepNames
132 - } 140 + },
133 - }); 141 + })
134 -}; 142 +}
......