-
Notifications
You must be signed in to change notification settings - Fork 43
/
vite.config.ts
89 lines (88 loc) · 3.23 KB
/
vite.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { resolve } from 'path';
import { ConfigEnv, UserConfigExport } from 'vite';
import autoprefixer from 'autoprefixer';
import plugins from './plugins';
// @ts-ignore
import px2rem from 'postcss-plugin-px2rem';
function pathResolve(dir: string) {
return resolve(__dirname, '.', dir);
}
export default async (configEnv: ConfigEnv): Promise<UserConfigExport> => {
return {
envPrefix: 'ME_',
plugins: await plugins(configEnv),
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/styles/variables.scss" as *;`,
},
},
postcss: {
plugins: [
autoprefixer,
px2rem({
rootValue: 14, //换算基数,将 px 替换为 1/rootValue rem (即设计图下的fontSize)
// unitPrecision: 5, //允许REM单位增长到的十进制数字。
propWhiteList: ['font-size'], //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
// propBlackList: ['font-size', 'border'], //不应从 px 更改为 rem 的属性
exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)\/如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
// selectorBlackList: [], //要忽略并保留为px的选择器
// ignoreIdentifier: false, //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
// replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
mediaQuery: false, //(布尔值)允许在媒体查询中转换px。
minPixelValue: 2, //设置要替换的最小像素值(包含)。 默认 0
}),
],
},
},
resolve: {
alias: [
// /@/xxxx => src/xxxx
{
find: /@\//,
replacement: pathResolve('src') + '/',
},
],
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
},
/* eslint-disable */
define: {
__SSR__: `true`,
__DEV__: configEnv.mode === 'development' ? `true` : `false`,
__COMPAT__: `false`,
__FEATURE_SUSPENSE__: `true`,
__FEATURE_PROD_DEVTOOLS__: `false`,
},
/* eslint-disable */
build: {
rollupOptions: {
output: {
manualChunks: {
// 打包优化
core: [
'vue',
'vue-router',
'pinia',
'vue-request',
'vue-i18n/dist/vue-i18n.esm-bundler.js',
'jquery',
'axios',
],
elIcon: ['@element-plus/icons-vue'],
mock: [pathResolve('./mock')],
},
},
},
},
optimizeDeps: {
//因为项目中很多用到了自动引入和动态加载,所以vite首次扫描依赖项会扫描不全,这里强制扫描全局。
entries: ['src/**/*.{ts,tsx,vue}'],
include: [
'element-plus/es/components/loading/style/css',
'element-plus/es/components/message/style/css',
'element-plus/es/components/message-box/style/css',
'element-plus/es/components/notification/style/css',
],
},
};
};