首页 > 其他分享 >Vite构建基本配置

Vite构建基本配置

时间:2024-01-11 15:02:52浏览次数:23  
标签:__ resolve string 配置 构建 plugins dirname Vite

通过vite.config.js 暴露出defineConfig函数实现构造,vite会读取defineConfig返回的配置对象,配置对象需要自行编写

defineConfig

该函数是vite工具助手函数,用来读取构建配置,其返回一个配置参数对象

通过查看源码得知,vite配置有以下可选非必要内容,常用了内容一般从rootbuild

//读取UserConfigExport类型的参数,并返回UserConfigExport类型的数据
export declare function defineConfig(config: UserConfigExport): UserConfigExport;
//UserConfigExport类型
export declare type UserConfigExport = UserConfig | Promise<UserConfig> | UserConfigFn;
//UserConfig 接口
export declare interface UserConfig {
    root?: string;
    base?: string;
    publicDir?: string | false;
    cacheDir?: string;
    mode?: string;
    define?: Record<string, any>;
    plugins?: PluginOption[];
    resolve?: ResolveOptions & {
        alias?: AliasOptions;
    };
    css?: CSSOptions;
    json?: JsonOptions;
    esbuild?: ESBuildOptions | false;
    assetsInclude?: string | RegExp | (string | RegExp)[];
    server?: ServerOptions;
    build?: BuildOptions;
    preview?: PreviewOptions;
    optimizeDeps?: DepOptimizationOptions;
    ssr?: SSROptions;
    experimental?: ExperimentalOptions;
    legacy?: LegacyOptions;
    logLevel?: LogLevel;
    customLogger?: Logger;
    clearScreen?: boolean;
    envDir?: string;
    envPrefix?: string | string[];
    worker?: {
        format?: 'es' | 'iife';
        plugins?: PluginOption[];
        rollupOptions?: Omit<RollupOptions, 'plugins' | 'input' | 'onwarn' | 'preserveEntrySignatures'>;
    };
    appType?: AppType;
}

常用配置项

root

项目根目录,默认值为process.cwd()

base

开发或生产环境下的基本公共路径配置,默认值为'/'

plugins

构建中使用的插件数组

resolve.alias

用来解析文件夹路径,改写文件夹快捷路径
resolve: {
	alias: {
		'@pages': resolve(__dirname, 'pages'),
		'@theme': resolve(__dirname, 'theme'),
		'@directive': resolve(__dirname, 'directive'),
		'@service': resolve(__dirname, 'service'),
		'@plugins': resolve(__dirname, 'plugins'),
		'@utils': resolve(__dirname, 'utils'),
		'@store': resolve(__dirname, 'store'),
		'@assets': resolve(__dirname, 'assets'),
		'@hooks': resolve(__dirname, 'hooks')
	}
}

css

css相关配置

css: {
	preprocessorOptions: { //预处理器配置项 配置less sass等预处理器
		less: { 
			additionalData: `@import '/assets/style/index.less';` //引入全局样式表
            //除此之外还可配置变量属性,是否允许less使用js等
		}
	},
	postcss: { //用来对css内容进行进一步处理,如单位转换,前缀自动补全等
		plugins: [
			require('autoprefixer'), //自动补全前缀
			require('postcss-pxtorem')({ //px单位转换为rem,适用于移动端
				rootValue: ({ file }) => {
					let rootValue
					if (file.indexOf('vant') > -1) {
						rootValue = 37.5
					} else if (file.indexOf('viewerjs') > -1) {
						rootValue = 37.5
					} else {
						rootValue = 75
					}
					return rootValue
				},
				propList: ['*'],
				selectorBlackList: ['.px']
			})
		]
	}
}

esbuild

将文件编译为js文件,常用于禁用打包后文件中的console和debugger
esbuild: {
    drop: env.VITE_NODE_ENV === 'prod' ? ['console', 'debugger'] : []
},

server

与网络配置相关
server:{
    https: false, // 是否开启 https
    open: false, // 是否自动在浏览器打开
    port: 9999, // 端口号
    host: '0.0.0.0', //监听本地网络,'0.0.0.0'代表监听所有网络
    proxy: { //反向代理,用来跨域
        '/api':{
            target:'https://***.***.***/' //需要被代理到的服务器地址
            changeOringin: true, //是否跨域
            secure:false, //是否开启https服务
            rewrite:(path)=>path.replace(/^\/api/,'/test-api'), //路径请求重写,匹配到/api后改写为/test-api
            bypass(req, res, moptions){ //辅助工具,可以查看被代理后的网络请求的地址
                if (env.VITE_NODE_ENV !== 'prod') {
					const proxyURL = options.target + options.rewrite(req.url)
					console.log('proxyURL', proxyURL)
					res.setHeader('req-proxyURL', proxyURL) //由于设置在请求头会无效,所以设置在响应头
				}
            }
        }
    }
}

build

打包特殊配置
build: {
	outDir: 'dist', //打包输出文件夹名称
	assetsDir: 'assets', //静态资源存放文件夹名
	minify: 'esbuild', //打包压缩配置
	chunkSizeWarningLimit: 1500,
	cssCodeSplit: true, // 默认true。如果设置为false,整个项目中的所有 CSS 将被提取到一个 CSS 文件中
	rollupOptions: { //对rollup的深入配置
		output: {
			// 输出文件名 使用hash值作为文件名 每次打包都是不同值
			chunkFileNames: `js/[hash].js`, 
			entryFileNames: `js/[hash].js`,
			assetFileNames: 'assets/[hash].[ext]',
			manualChunks(id) {
				// 将pinia的全局库实例打包进vendor,避免和页面一起打包造成资源重复引入
				if (id.includes(resolve(__dirname, 'store/index.ts'))) {
					return 'vendor'
				} else if (id.includes('node_modules')) {
					// 单独打包第三方依赖
					return id.toString().split('node_modules/')[1].split('/')[0].toString()
				}
			}
		},
		plugins: [
            //使用terser压缩文件
			terser({
				ecma: 2020,
				compress: {
					unused: true,
					drop_console: env.VITE_NODE_ENV === 'prod',
					dead_code: true
				},
				output: {
					comments: false
				}
			})
		]
	}
}

 

标签:__,resolve,string,配置,构建,plugins,dirname,Vite
From: https://www.cnblogs.com/karle/p/17958530

相关文章

  • ShowMeBug X AfterShip | 构建高效招聘体系,助推企业人才战略发展
    ShowMeBug与AfterShip成功完成签约,借助ShowMeBug在技术招聘上的赋能,强化企业技术招聘的出题、笔试、面试等各个环节,高质量打造技术驱动的招聘团队,完善适配企业发展的技术人才体系。AfterShip通过使用ShowMeBug丰富的岗位题库来进行技术人才测评,其中最核心的实战工程题型还能......
  • MySQL数据库安全配置规范
    在生产中,安全相当重要,毕竟你的核心数据都在里面,MySQL因为其开源的流行性,大量个人,企业,政府单位采用,但是,很多部署的时候采用都是默认的配置,这就导致了安全的相对欠缺,你需要针对你的安全有所加强。总的来说,数据库一般划分为生产库,压测库,准生产库,测试库,开发库。下面部分主要说的是生产......
  • 4.k8s-配置网络策略 NetworkPolicy
    一、基本了解官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/基本了解:1.网络策略通过网络插件来实现,创建一个NetworkPolicy资源对象而没有控制器来使它生效的话,是没有任何作用的,而我们搭建K8s集群时安装的calico网络组件就支持网......
  • 半小时搞定Yolov5安装配置及使用(详细过程)
    之前在学习目标检测的时候,正值Yolov5发布,当时试用了下感觉还不错,最近有时间使用最新的Yolov5源码,重新整理下安装配置到使用过程。。实践整个过程半小时即可搞定(前提已有Anaconda)总体来看Yolov5的速度和效率较之前yolov4等系列都快,准确度更高。。在下载配置Yolov5前,先要安装......
  • 08-配置管理:Kubernete 管理业务配置方式有哪些?配置管理:Kubernete 管理业务配置方式有
    通过前面几节课的学习,我们已经对Kubernetes中的Pod以及一些业务负载有所了解。你可以根据课程中提供的示例,自己动手尝试在集群中实践起来。在使用过程中,我们常常需要对Pod进行一些配置管理,比如参数配置文件怎么使用,敏感数据怎么保存传递,等等。有些人可能会觉得,为什么不把这......
  • Conditional Git Configuration 有条件配置Git信息
    本文学习自Blog本文介绍Git的一个特性,具有潜在的实用性。该特性就是“有条件地为Git项目配置Git信息”。这意味着开发者能根据简单的条件设置,为Git项目仓库自动添加或覆盖添加Git配置信息。下面通过一个简单的例子进行说明。在系统层面的Git配置中,添加如下内容:[includeIf"git......
  • 如何构建一个 NodeJS 影院微服务并使用 Docker 部署
    如何构建一个NodeJS影院微服务并使用Docker部署前言如何构建一个NodeJS影院微服务并使用Docker部署。在这个系列中,将构建一个NodeJS微服务,并使用DockerSwarm集群进行部署。以下是将要使用的工具:NodeJS版本7.2.0MongoDB3.4.1DockerforMac1.12.6在尝试......
  • [Cisco ASAv] 思科自适应安全虚拟设备 (ASAv)部署与初始化配置(含ASDM)
    CiscoASAv是什么设备?CiscoASAv(AdaptiveSecurityVirtualAppliance)是思科公司提供的一种虚拟化网络安全解决方案。它是基于CiscoASA(AdaptiveSecurityAppliance)硬件防火墙的软件实现,旨在提供类似于物理ASA设备的网络安全功能。ASAv以虚拟机(VM)的形式部署在虚拟化平台上,如VMwar......
  • Ansible - 关于sudo的一些配置
     sudosudo,以超级管理员或其他人的身份执行命令基本流程管理员需要先授权(修改/etc/sudoers文件)普通用户以sudo的形式执行命令可以通过sudo-l查看授权情况配置suddoer:vim/etc/sudoers,进行如下配置,jerry用户可以无需输入密码即以root身份,执行systemctl命令可以切换jerr......
  • 配置通过STelnet登录系统
    拓扑配置查看代码[R2]discurrent-configuration[V200R003C00]#sysnameR2#snmp-agentlocal-engineid800007DB03000000000000snmp-agent#clocktimezoneChina-Standard-Timeminus08:00:00#portallocal-serverloadportalpage.zip#dropillegal-mac......