Skip to content

Commit

Permalink
feat: enable experimentalOptimizer
Browse files Browse the repository at this point in the history
  • Loading branch information
sheremet-va committed May 20, 2023
1 parent 41e11da commit a623336
Show file tree
Hide file tree
Showing 6 changed files with 700 additions and 607 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -74,7 +74,7 @@
},
"pnpm": {
"overrides": {
"vite": "^4.2.1",
"vite": "^4.3.8",
"vitest": "workspace:*"
}
},
Expand Down
3 changes: 1 addition & 2 deletions packages/vite-node/src/externalize.ts
Expand Up @@ -123,8 +123,7 @@ async function _shouldExternalize(
if (matchExternalizePattern(id, depsExternal))
return id

const isDist = id.includes('/dist/')
if ((isNodeModule || isDist) && await isValidNodeImport(id))
if (isNodeModule && await isValidNodeImport(id))
return id

return false
Expand Down
9 changes: 6 additions & 3 deletions packages/vitest/src/node/error.ts
Expand Up @@ -169,9 +169,12 @@ function printModuleWarningForPackage(logger: Logger, path: string, name: string
+ c.green(`export default {
test: {
deps: {
inline: [
${c.yellow(c.bold(`"${name}"`))}
]
experimentalOptimizer: {
enabled: true,
include: [
${c.yellow(c.bold(`"${name}"`))}
]
}
}
}
}\n`)))
Expand Down
66 changes: 24 additions & 42 deletions packages/vitest/src/node/plugins/index.ts
@@ -1,3 +1,5 @@
import { builtinModules } from 'node:module'
import { version as viteVersion } from 'vite'
import type { UserConfig as ViteConfig, Plugin as VitePlugin } from 'vite'
import { relative } from 'pathe'
import { configDefaults } from '../../defaults'
Expand Down Expand Up @@ -134,49 +136,29 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest('t
}

const optimizeConfig: Partial<ViteConfig> = {}
// TODO: optimizer is temporary disabled, until Vite provides "optimzier.byDefault" option
// const optimizer = preOptions.deps?.experimentalOptimizer
// if (!optimizer?.enabled) {
optimizeConfig.cacheDir = undefined
optimizeConfig.optimizeDeps = {
// experimental in Vite >2.9.2, entries remains to help with older versions
disabled: true,
entries: [],
const optimizer = preOptions.deps?.experimentalOptimizer
const [major, minor] = viteVersion.split('.').map(Number)
const allowed = major >= 5 || (major === 4 && minor >= 3)
if (!allowed || !optimizer?.enabled) {
optimizeConfig.cacheDir = undefined
optimizeConfig.optimizeDeps = {
// experimental in Vite >2.9.2, entries remains to help with older versions
disabled: true,
entries: [],
}
}
else {
const cacheDir = preOptions.cache !== false ? preOptions.cache?.dir : null
optimizeConfig.cacheDir = cacheDir ?? 'node_modules/.vitest'
optimizeConfig.optimizeDeps = {
...viteConfig.optimizeDeps,
...optimizer,
noDiscovery: true,
disabled: false,
exclude: ['vitest', ...builtinModules, ...(optimizer.exclude || viteConfig.optimizeDeps?.exclude || [])],
include: (optimizer.include || viteConfig.optimizeDeps?.include || []).filter((n: string) => n !== 'vitest'),
}
}
// }
// else {
// const root = config.root || process.cwd()
// // TODO: add support for experimental optimizer
// const entries = []
// // const [...entries] = await ctx.globAllTestFiles(preOptions as ResolvedConfig, preOptions.dir || root)
// if (preOptions?.setupFiles) {
// const setupFiles = toArray(preOptions.setupFiles).map((file: string) =>
// normalize(
// resolveModule(file, { paths: [root] })
// ?? resolve(root, file),
// ),
// )
// entries.push(...setupFiles)
// }
// const cacheDir = preOptions.cache !== false ? preOptions.cache?.dir : null
// optimizeConfig.cacheDir = cacheDir ?? 'node_modules/.vitest'
// optimizeConfig.optimizeDeps = {
// ...viteConfig.optimizeDeps,
// ...optimizer,
// disabled: false,
// entries: [...(viteConfig.optimizeDeps?.entries || []), ...entries],
// exclude: ['vitest', ...builtinModules, ...(optimizer.exclude || viteConfig.optimizeDeps?.exclude || [])],
// include: (optimizer.include || viteConfig.optimizeDeps?.include || []).filter((n: string) => n !== 'vitest'),
// }
// // Vite throws an error that it cannot rename "deps_temp", but optimization still works
// // let's not show this error to users
// const { error: logError } = console
// console.error = (...args) => {
// if (typeof args[0] === 'string' && args[0].includes('/deps_temp'))
// return
// return logError(...args)
// }
// }
Object.assign(config, optimizeConfig)

return config
Expand Down
2 changes: 1 addition & 1 deletion packages/vitest/src/types/config.ts
Expand Up @@ -74,7 +74,7 @@ interface DepsOptions {
/**
* Enable dependency optimization. This can improve the performance of your tests.
*/
experimentalOptimizer?: Omit<DepOptimizationConfig, 'disabled'> & {
experimentalOptimizer?: Omit<DepOptimizationConfig, 'disabled' | 'noDiscovery'> & {
enabled: boolean
}
/**
Expand Down

0 comments on commit a623336

Please sign in to comment.