import { defineConfig, loadEnv } from 'vite' import path from 'path' import createVitePlugins from './vite/plugins' import px2rem from 'postcss-plugin-px2rem' // https://vitejs.dev/config/ export default defineConfig(({ mode, command }) => { const env = loadEnv(mode, process.cwd()) return { build: { target: 'es2020', rollupOptions: { input: './index.html', _output: {//不配置 // 入口文件 entryFileNames(chunk) { return 'assets/js/app-[hash].js'; }, // async-chunk chunkFileNames() { return 'assets/js/[name]-[hash].js'; }, // 资源文件 assetFileNames(chunk) { // css if (chunk.name?.endsWith('.css')) { return 'assets/css/[name]-[hash].[ext]'; } // image if (/.(png|jpg|gif|jpeg|webp|svg)$/.test(chunk.name || '')) { return 'assets/imgs/[name].[ext]'; } return `assets/other/[name].[ext]`; }, }, }, }, optimizeDeps: { esbuildOptions: { target: 'es2020', }, }, // 部署生产环境和开发环境下的URL。 // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 plugins: createVitePlugins(env, command === 'build'), base: './', envDir: path.resolve(__dirname, './env'), resolve: { // https://cn.vitejs.dev/config/#resolve-alias alias: { // 设置路径 '~': path.resolve(__dirname, './'), // 设置别名 '@': path.resolve(__dirname, './src') }, // https://cn.vitejs.dev/config/#resolve-extensions extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] }, // vite 相关配置 server: { hmr: true, port: 8887, host: true, open: false, proxy: { // https://cn.vitejs.dev/config/#server-proxy '/api/': { target: 'http://127.0.0.1:8080', changeOrigin: true, rewrite: (p) => p.replace(/^\/api/, ''), timeout: 60000, proxyTimeout:60000 }, '/upload': { target: 'http://127.0.0.1:8080', changeOrigin: true }, '/files': { target: 'http://192.168.3.53:9000', changeOrigin: true } } }, //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file css: { preprocessorOptions: { scss: { additionalData: '@use "/src/assets/css/global.scss" as *;', api: "modern-compiler" } }, postcss: { plugins: [ px2rem({ rootValue: 15, //换算基数, 默认100 ,也就是1440px ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多少px了 unitPrecision: 5, //允许REM单位增长到的十进制数字,其实就是精度控制 // propWhiteList: [], // 默认值是一个空数组,这意味着禁用白名单并启用所有属性。 // propBlackList: [], // 黑名单 // exclude:false, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值 // selectorBlackList: [], //要忽略并保留为px的选择器 // ignoreIdentifier: false, //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。 // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。 mediaQuery: false, //(布尔值)允许在媒体查询中转换px minPixelValue: 0 //设置要替换的最小像素值(3px会被转rem)。 默认 0 }), { postcssPlugin: 'internal:charset-removal', AtRule: { charset: (atRule) => { if (atRule.name === 'charset') { atRule.remove(); } } } } ] } } } })