mirror of
https://github.com/cypress-io/cypress.git
synced 2026-02-09 16:50:23 -06:00
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
// @ts-check
|
|
const debug = require('debug')('@cypress/react')
|
|
const loadConfig = require('next/dist/next-server/server/config').default
|
|
const getNextJsBaseWebpackConfig = require('next/dist/build/webpack-config')
|
|
.default
|
|
const webpackPreprocessor = require('@cypress/webpack-preprocessor')
|
|
const findWebpack = require('find-webpack')
|
|
|
|
async function getNextWebpackConfig (config) {
|
|
const coverageIsDisabled =
|
|
config && config.env && config.env.coverage === false
|
|
|
|
debug('coverage is disabled? %o', { coverageIsDisabled })
|
|
|
|
const nextConfig = await loadConfig('development', config.projectRoot)
|
|
const nextWebpackConfig = await getNextJsBaseWebpackConfig(
|
|
config.projectRoot,
|
|
{
|
|
buildId: `@cypress/react-${Math.random().toString()}`,
|
|
config: nextConfig,
|
|
dev: false,
|
|
isServer: false,
|
|
pagesDir: config.projectRoot,
|
|
entrypoints: {},
|
|
rewrites: [],
|
|
},
|
|
)
|
|
|
|
debug('resolved next.js webpack options: %o', nextWebpackConfig)
|
|
// Using mode over `dev` true to get rid of next's react-refresh-plugin wrapping
|
|
// We need do not need all the HMR and webpack dev middlewares as well
|
|
nextWebpackConfig.mode = 'development'
|
|
|
|
findWebpack.cleanForCypress(
|
|
{
|
|
coverage: !coverageIsDisabled,
|
|
// insert Babel plugin to mock named imports
|
|
// disable because causes an error with double definitions
|
|
// https://github.com/bahmutov/@cypress/react/issues/439
|
|
looseModules: false,
|
|
},
|
|
nextWebpackConfig,
|
|
)
|
|
|
|
debug('final webpack options %o', nextWebpackConfig)
|
|
|
|
return nextWebpackConfig
|
|
}
|
|
|
|
let webpackConfigCache = null
|
|
|
|
/** Resolving next.js webpack and all config with plugin takes long, so cache the webpack configuration */
|
|
async function getCachedWebpackPreprocessor (config) {
|
|
// ⛔️ ⛔️ Comment this `if` for debugging
|
|
if (webpackConfigCache !== null) {
|
|
return webpackConfigCache
|
|
}
|
|
|
|
const webpackOptions = await getNextWebpackConfig(config)
|
|
|
|
webpackConfigCache = webpackPreprocessor({ webpackOptions })
|
|
|
|
debug('created and cached webpack preprocessor based on next.config.js')
|
|
|
|
return webpackConfigCache
|
|
}
|
|
|
|
module.exports = (config) => {
|
|
return async (fileEvent) => {
|
|
const preprocessor = await getCachedWebpackPreprocessor(config)
|
|
|
|
return preprocessor(fileEvent)
|
|
}
|
|
}
|