import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import { createHtmlPlugin } from 'vite-plugin-html'
import vitePluginEslint from "vite-plugin-eslint"
const resolve = dir => path.resolve(__dirname, '.', dir)
// https://vitejs.dev/config/
export default defineConfig(( { mode } ) => {
return {
plugins: [
react(),
createHtmlPlugin({
minify: true,
pages: [
{
filename: 'index.html',
template: 'index.html',
injectOptions: {
data: {
title: '网站工具管理系统',
DATE: Date.now()
},
},
},
]
}),
// 启用代码检查
mode === 'development' && vitePluginEslint({
lintOnStart: false, // 启动时候是否就执行 eslint 校验,如果开启的话有eslint的报错则服务是会启动失败
})
],
// 项目启动的根路径
// root: './',
// 入口
entry: 'index.html',
// 打包根路径
base:'./',
// 静态资源服务的文件夹
publicDir: 'public',
// 是否开启ssr服务断渲染
ssr: false,
// 重命名路径
resolve: {
alias : {
'@' : resolve('src'),
'@assets' : resolve('src/assets'),
'@css' : resolve('src/assets/css'),
'@img' : resolve('src/assets/images'),
'@js' : resolve('src/assets/js'),
'@com' : resolve('src/_pub/common'),
'@utils' : resolve('src/_pub/common/utils'),
'@cpt' : resolve('src/_pub/global/component'),
'@tp' : resolve('src/_pub/global/template'),
'@plugin' : resolve('src/_pub/global/plugin'),
'@antd' : resolve('src/_pub/global/plugin/antd'),
'@echart' : resolve('src/_pub/global/plugin/echart'),
'#private' : resolve('src/_pub/private'),
'#cpt' : resolve('src/_pub/private/component'),
'#tp' : resolve('src/_pub/private/template'),
'#plugin' : resolve('src/_pub/private/plugin'),
'#frame' : resolve('src/_pub/private/frame'),
'$project' : resolve('src/project'),
'$cpt' : resolve('src/project/component'),
'$tp' : resolve('src/project/template'),
'$frame' : resolve('src/project/frame'),
'$plugin' : resolve('src/project/plugin'),
'$utils' : resolve('src/project/utils'),
'@views' : resolve('src/views'),
'@pages' : resolve('src/pages'),
}
},
server:{
host: '0.0.0.0', // 主机
port: 8081, // 端口
open: true, // 是否自动开启浏览器
https: false, //
// hmr:true, // 是否开启自动刷新
cors: true, // 允许跨域
// 代理
proxy: {
// '/api': {
// target: 'http://xxx.xxx.xxx.xxx:8000',
// changeOrigin: true,
// secure: false,
// rewrite: (path) => path.replace('/api/', '/')
// }
}
},
// 开启控制台输出日志
silent: false,
// 哪个第三方的包需要重新编译
optimizeDeps:[
// exclude: ['axios', 'qs', 'vue', 'vuex']
],
//编译
build: {
// 打包文件放置目录
outDir: './build',
// 输出的静态资源的文件夹名称
assetsDir:'static',
//构建后是否生成 source map 文件
sourcemap: false,
// 小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求。设置为 0 可以完全禁用此项
assetsInlineLimit: 4096,
// 是否提取 CSS 到单独的文件中
cssCodeSplit: true,
// 是否开启 CSS 压缩
cssMinify: true,
// 是否开启 CSS 去重
cssInlineLimit: 4096,
// 启用/禁用 esbuild 的 minification,如果设置为 false 则使用 Terser 进行 minification
// target: 'es2018', // 可选值:'esnext' | 'es2020' | 'es2019' | 'es2018' | 'es2017' | 'es2016' | 'es2015' | 'es5'
// 设置为 false 来禁用将构建后的文件写入磁盘
write: true,
//默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录。
emptyOutDir: true,
// 是否开启 brotli 压缩
// brotli: true,
// 启用/禁用 brotli 压缩大小报告
// brotliSize: true,
// chunk 大小警告的限制
chunkSizeWarningLimit: 500,
// 当设置为 true,构建后将会生成 manifest.json 文件
manifest: false,
// 自定义底层的 Rollup 打包配置
rollupOptions: {
// 确保外部化处理那些你不想打包进库的依赖
// external: ['vue', 'nf-tool'],
output: {
// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
// globals: { vue: 'Vue', 'nf-tool': 'nfTool' },
// 自定义输出文件名
// chunkFileNames: 'static/js1/[name]-[hash].js',
// entryFileNames: 'static/js2/[name]-[hash].js',
// assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
// brotliSize: false, // 不统计
// target: 'esnext',
// minify: 'esbuild' // 混淆器,terser 构建后文件体积更小
}
},
// @rollup/plugin-commonjs 插件的选项
commonjsOptions: { },
// terser 构建后文件体积更小
minify: 'terser', // 可选值:'terser' | 'esbuild'
// 传递给 Terser 的更多 minify 选项。
terserOptions: {
compress: { drop_console: true, drop_debugger: true } // 去除 console
}
},
// 要将一些共享的全局变量传递给所有的Less样式
css:{
preprocessorOptions:{
less:{
modifyVars: {
},
javascriptEnabled: true
}
}
},
json: {
//是否支持从 .json 文件中进行按名导入
namedExports: true,
//若设置为 true 导入的json会被转为 export default JSON.parse("..") 会比转译成对象字面量性能更好
stringify:false
}
}
})
vite+react
最新推荐文章于 2024-09-24 10:20:16 发布