Skip to content

Commit 6a40936

Browse files
msebasZachJW34
andauthored
fix: allow asynchronous vue cli init phase (#23936)
Co-authored-by: Zachary Williams <ZachJW34@gmail.com>
1 parent 88ecb1e commit 6a40936

File tree

8 files changed

+4239
-9
lines changed

8 files changed

+4239
-9
lines changed

npm/webpack-dev-server/cypress/e2e/vue-cli.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/// <reference path="../support/e2e.ts" />
22
import type { ProjectFixtureDir } from '@tooling/system-tests/lib/fixtureDirs'
33

4-
const PROJECTS: ProjectFixtureDir[] = ['vuecli4-vue2', 'vuecli4-vue3', 'vuecli5-vue3']
4+
const PROJECTS: ProjectFixtureDir[] = ['vuecli4-vue2', 'vuecli4-vue3', 'vuecli5-vue3', 'vuecli5-vue3-type-module']
55

66
// Add to this list to focus on a particular permutation
77
const ONLY_PROJECTS: ProjectFixtureDir[] = []

npm/webpack-dev-server/src/devServer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ async function getPreset (devServerConfig: WebpackDevServerConfig): Promise<Opti
122122
return await nuxtHandler(devServerConfig)
123123

124124
case 'vue-cli':
125-
return vueCliHandler(devServerConfig)
125+
return await vueCliHandler(devServerConfig)
126126

127127
case 'next':
128128
return await nextHandler(devServerConfig)

npm/webpack-dev-server/src/helpers/vueCliHandler.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@ import { sourceDefaultWebpackDependencies } from './sourceRelativeWebpackModules
55

66
const debug = debugLib('cypress:webpack-dev-server:vueCliHandler')
77

8-
export function vueCliHandler (devServerConfig: WebpackDevServerConfig): PresetHandlerResult {
8+
export async function vueCliHandler (devServerConfig: WebpackDevServerConfig): Promise<PresetHandlerResult> {
99
const sourceWebpackModulesResult = sourceDefaultWebpackDependencies(devServerConfig)
1010

1111
try {
12-
const config = require.resolve('@vue/cli-service/webpack.config', {
12+
const Service = require(require.resolve('@vue/cli-service', {
1313
paths: [devServerConfig.cypressConfig.projectRoot],
14-
})
14+
}))
15+
let service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
1516

16-
const webpackConfig = require(config) as Configuration
17+
await service.init(process.env.VUE_CLI_MODE || process.env.NODE_ENV)
18+
const webpackConfig = service.resolveWebpackConfig() as Configuration
1719

1820
debug('webpack config %o', webpackConfig)
1921

2022
return { frameworkConfig: webpackConfig, sourceWebpackModulesResult }
2123
} catch (e) {
2224
console.error(e) // eslint-disable-line no-console
23-
throw Error(`Error loading @vue/cli-service/webpack.config.js. Looked in ${require.resolve.paths(devServerConfig.cypressConfig.projectRoot)}`)
25+
throw Error(`Error loading @vue/cli-service/lib/Service or resolving WebpackConfig. Looked in ${require.resolve.paths(devServerConfig.cypressConfig.projectRoot)}`)
2426
}
2527
}

npm/webpack-dev-server/test/handlers/vueCliHandler.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe('vueCliHandler', function () {
1313

1414
process.chdir(projectRoot)
1515

16-
const { frameworkConfig: webpackConfig, sourceWebpackModulesResult } = vueCliHandler({
16+
const { frameworkConfig: webpackConfig, sourceWebpackModulesResult } = await vueCliHandler({
1717
cypressConfig: { projectRoot } as Cypress.PluginConfigOptions,
1818
framework: 'vue-cli',
1919
} as WebpackDevServerConfig)
@@ -30,7 +30,7 @@ describe('vueCliHandler', function () {
3030

3131
process.chdir(projectRoot)
3232

33-
const { frameworkConfig: webpackConfig, sourceWebpackModulesResult } = vueCliHandler({
33+
const { frameworkConfig: webpackConfig, sourceWebpackModulesResult } = await vueCliHandler({
3434
cypressConfig: { projectRoot } as Cypress.PluginConfigOptions,
3535
framework: 'vue-cli',
3636
} as WebpackDevServerConfig)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"dependencies": {
3+
"vue": "^3.2.13"
4+
},
5+
"devDependencies": {
6+
"@vue/cli-service": "~5.0.0"
7+
},
8+
"type": "module",
9+
"projectFixtureDirectory": "vue-cli"
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"compilerOptions": {
3+
"module": "es6"
4+
}
5+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { defineConfig } from '@vue/cli-service'
2+
3+
export default defineConfig({})

0 commit comments

Comments
 (0)