1. 安装 vite-plugin-html 插件, 并引入

import { createHtmlPlugin } from 'vite-plugin-html'

//...
export default ({ mode }) => {
    //...
    plugins: [
        createHtmlPlugin({
            inject: {
                data: {
    
                }
            }
        }),
        //....
    ],
    //...
}
//...

2. 定义所需要的数据

import path from 'node:path'
// ...

const vmDesignWidth = 3840 // 设计稿宽度
const vmDesignHeight = 1080 // 设计稿宽度
const minWindow = '1920Px' // 兼容最小宽度
const vmFontsize = 100

export default ({ mode }) => {
    //...
    plugins: [
        createHtmlPlugin({
            inject: {
                data: {
    
                }
            }
        }),
        //....
    ],
    //...
}

3. 将定义的数据作为额外数据给 scss

export default ({ mode }) => {
    css: {
        preprocessorOptions: {
            scss: {
                additionalData: `
                    $vmDesignWidth: ${vmDesignWidth};
                    $vmDesignHeight: ${vmDesignHeight};
                    $minWindow: ${minWindow};
                    $vmFontsize: ${vmFontsize};
                `
            }
        }
    },
    //...
})

4. 将定义的数据通过 vite-plugin-html 插件暴露给 html 模板

export default ({ mode }) => {
    //...
    plugins: [
        createHtmlPlugin({
            inject: {
                data: {
                   _designWidth: JSON.stringify(vmDesignWidth),
                   _designHeight: JSON.stringify(vmDesignHeight),
                   _minWindow: JSON.stringify(minWindow),
                   _fontSize: JSON.stringify(vmFontsize),
                }
            }
        }),
        //....
    ],
    //...
}

5. 修改 index.html 模板

<head>
    <!-- ... -->
    <script>
        window._designWidth = JSON.parse('<%- _designWidth %>')
        window._designHeight = JSON.parse('<%- _designHeight %>')
        window._minWindow = JSON.parse('<%- _minWindow %>')
        window._fontSize = JSON.parse('<%- _fontSize %>')
    </script>
    <!-- ... -->
</head>

6. 这样就可以在 scss 和 js 中使用定义的变量了

:root {
    --design-width: #{$vmDesignWidth}px;
    --design-height: #{$vmDesignHeight}px;
}

#app, #root, .global-wrap {
    width: var(--design-width);
    height: var(--design-height);
}
const { width } = $(useWindowSize())
const singleHeight = $computed(() => parseInt(32 * width / window._designWidth, 10))

7. 问题

这种方法, 数据只能是常量, 不能是变量