vite.config.js

css配置
css模块化配置
export default defineConfig({plugins: [vue()],css:{modules:{//对css模块化的默认行为的覆盖,配置之后会交由postcss处理localsConvention:"camelCaseOnly",//修改生成的配置对象的key值 展示形式 eg:驼峰命名scopeBehaviour:'local',//配置当前的模块化行为是模块化还是全局,有hash就是开启模块化的标志。generateScopedName:"[name]_[local]_[hash:5]",hashPrefix:'hellow',//用户来配置独特的hashglobalModulePaths:[path.resolve('/dawdsa')],//代表不想参与到css模块化的路径}}})
css预处理器配置
preprocessorOptions:{//key+config形式less:{math:"always",//识别计算表达式globalVars:{themeColor:'red'}, //定义全局变量},sass:{}},devSourcemap:true,//开启sourcemap}
postcss配置
export default defineConfig({plugins: [vue()],css:{modules:{//对css模块化的默认行为的覆盖,配置之后会交由postcss处理localsConvention:"camelCaseOnly",//修改生成的配置对象的key值 展示形式 eg:驼峰命名scopeBehaviour:'local',//配置当前的模块化行为是模块化还是全局,有hash就是开启模块化的标志。generateScopedName:"[name]_[local]_[hash:5]",hashPrefix:'hellow',//用户来配置独特的hashglobalModulePaths:[path.resolve('/dawdsa')],//代表不想参与到css模块化的路径},preprocessorOptions:{//key+config形式less:{math:"always",//识别计算表达式globalVars:{themeColor:'red'}, //定义全局变量},sass:{}},devSourcemap:true,//开启sourcemappostcss:{plugins:[postCssPreset(//导入变量,到处变量, autofix,...)] //预设options=> https://github.com/csstools/postcss-preset-env}}})
vite对静态资源的处理
对大多数静态资源都是开箱即用。
resolve配置项==》和webpack用法一样
生产构建静态资源
build:{rollupOptions:{output:{assetFileNames:'[hash].[name].[ext]'},},assetsInlineLimit:4096000,outDir:'TestDir',assetsDir:'static'}
vite部分插件的源码阅读
vite-aliases:通过读取更目录下src的所有文件,将其分为文件夹和文件,定义resolve配置对象,将键定义为所需要的别名,而值设置为文件夹的路径地址。最后返回该配置对象,vite会自动将其与vite.config.js中的配置对象进行合并(在插件的config钩子中)。
vite-plugin-html:将html中的字符串变量进行替换(在transformIndexHtml钩子中完成)
手写vite-plugin-mock:(在configureServer钩子中完成)
const fs = require('fs')const path = require('path')module.exports = (options)=>{// 主要就是拦截http去请求// 当我们通过fetch和axios去发送请求时// 当打给vite本地服务器的时候,vitesever接管return {configureServer(server){const mockStat = fs.statSync('mock');const isDirectory = mockStat.isDirectory();let mockResult = [];if(isDirectory){mockResult = require(path.resolve(process.cwd(),'./mock/index'))}server.middlewares.use((req,res,next)=>{let matchIndex = mockResult.findIndex(mockDescription=>mockDescription.url==req.url)if(matchIndex!=-1){res.setHeader('Content-type','application/json')res.end(JSON.stringify(mockResult[matchIndex]))}elsenext()})}}}
vite作为开箱即用的工具内置了那些功能插件
源码地址 https://github.com/vitejs/vite/blob/e223f84af877d354e197ca0ce9103777ed247718/packages/vite/src/node/plugins/index.ts
在vite的源码中我们可以看到内置的一些功能
import aliasPlugin from '@rollup/plugin-alias'import type { PluginHookUtils, ResolvedConfig } from '../config'import { isDepsOptimizerEnabled } from '../config'import type { HookHandler, Plugin } from '../plugin'import { getDepsOptimizer } from '../optimizer'import { shouldExternalizeForSSR } from '../ssr/ssrExternal'import { jsonPlugin } from './json'import { resolvePlugin } from './resolve'import { optimizedDepsBuildPlugin, optimizedDepsPlugin } from './optimizedDeps'import { esbuildPlugin } from './esbuild'import { importAnalysisPlugin } from './importAnalysis'import { cssPlugin, cssPostPlugin } from './css'import { assetPlugin } from './asset'import { clientInjectionsPlugin } from './clientInjections'import { buildHtmlPlugin, htmlInlineProxyPlugin } from './html'import { wasmFallbackPlugin, wasmHelperPlugin } from './wasm'import { modulePreloadPolyfillPlugin } from './modulePreloadPolyfill'import { webWorkerPlugin } from './worker'import { preAliasPlugin } from './preAlias'import { definePlugin } from './define'import { ssrRequireHookPlugin } from './ssrRequireHook'import { workerImportMetaUrlPlugin } from './workerImportMetaUrl'import { assetImportMetaUrlPlugin } from './assetImportMetaUrl'import { ensureWatchPlugin } from './ensureWatch'import { metadataPlugin } from './metadata'import { dynamicImportVarsPlugin } from './dynamicImportVars'import { importGlobPlugin } from './importMetaGlob'
