Skip to content

Commit

Permalink
fix: friendly error message
Browse files Browse the repository at this point in the history
  • Loading branch information
Chieffo committed Dec 14, 2021
1 parent ddea1f5 commit 28a8db3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 28 deletions.
64 changes: 39 additions & 25 deletions src/config/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,46 @@ export async function parseWebpackConfig (
): Promise<WebpackConfig> {
let webpackConfig: WebpackConfig = {}

try {
// first, parse webpack config from path : ${__dirname}/webpack.config.js
if (fs.existsSync(configPath)) {
// first, parse webpack config from path : ${__dirname}/webpack.config.js
if (fs.existsSync(configPath)) {
try {
await import(configPath).then((config) => {
webpackConfig = config
});
return webpackConfig
}
// if webpack.config.js not exists in ${__dirname}/webpack.config.js, scan folder ${__dirname}/build/
const dir = path.dirname(configPath)
let buildDir = path.resolve(dir, 'build')
// if folder ${__dirname}/build/ not exists, scan folder ${__dirname}/webpack/
if (!fs.existsSync(buildDir)) {
buildDir = path.resolve(dir, 'webpack')
})
} catch (e) {
if (e.message.includes(configPath)) {
console.error(`\nFailed to parse webpack config from default file path: ${configPath}.`)
} else {
throw e
}
}
// default config files: webpack.base.js、webpack.dev.js、webpack.prod.js|webpack.build.js|webpack.production.js
// TODO: production config
const devConfigPath = path.resolve(buildDir, 'webpack.dev.conf.js')
return webpackConfig
}
// if webpack.config.js not exists in ${__dirname}/webpack.config.js, scan folder ${__dirname}/build/
const dir = path.dirname(configPath)
let buildDir = path.resolve(dir, 'build')
// if folder ${__dirname}/build/ not exists, scan folder ${__dirname}/webpack/
if (!fs.existsSync(buildDir)) {
buildDir = path.resolve(dir, 'webpack')
}
// default config files: webpack.base.js、webpack.dev.js、webpack.prod.js|webpack.build.js|webpack.production.js
// TODO: production config
const devConfigPath = path.resolve(buildDir, 'webpack.dev.conf.js')
try {
await import(devConfigPath).then((config) => {
webpackConfig = config
})
} catch (e) {
console.error(`\nFailed to parse webpack config from default file path: ${configPath}.`)
console.warn('Note: webpack conversion is based on `webpack.config.js` or' +
' `webpack.base.js/webpack.dev.js/webpack.prod.js` or' +
' `webpack.build.js/webpack.production.js`, map configuration to `vite.config.js`\n' +
'If you are not using configuration files above, you need to convert configurations manually.')
console.error(e)
console.log(`Using default webpack config: ${JSON.stringify(webpackConfig)}.`)
if (e.message.includes(devConfigPath)) {
console.error(`\nFailed to parse webpack config from default file path: ${devConfigPath}.`)
console.warn('Note: webpack conversion is based on `webpack.config.js` or' +
' `webpack.base.js/webpack.dev.js/webpack.prod.js` or' +
' `webpack.build.js/webpack.production.js`, map configuration to `vite.config.js`. ' +
'\nIf you are not using configuration files above, you need to convert configurations manually.')
console.log(`Using default webpack config: ${JSON.stringify(webpackConfig)}.`)
} else {
throw e
}
}

return webpackConfig
Expand All @@ -53,9 +64,12 @@ export async function parseVueCliConfig (
})
}
} catch (e) {
console.error(`\nFailed to parse vue config from default file path: ${configPath}.`)
console.error(e)
console.log(`Using default vue config: ${JSON.stringify(vueCliConfig)}.`)
if (e.message.includes(configPath)) {
console.error(`\nFailed to parse vue config from default file path: ${configPath}.`)
console.log(`Using default vue config: ${JSON.stringify(vueCliConfig)}.`)
} else {
throw e
}
}
return vueCliConfig
}
20 changes: 17 additions & 3 deletions src/transform/transformVuecli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,29 @@ export class VueCliTransformer implements Transformer {
// alias
const chainableConfig = new Config()
if (vueConfig.chainWebpack) {
vueConfig.chainWebpack(chainableConfig)
try {
vueConfig.chainWebpack(chainableConfig)
} catch (e) {
console.error('\nTransforming chainWebpack config failed. Please manually convert it.')
console.error(e)
console.log('skip transforming the chainWebpack...')
}
}
const aliasOfChainWebpack = chainableConfig.resolve.alias.entries()
const aliasOfConfigureWebpackObjectMode =
vueConfig?.configureWebpack?.resolve?.alias || {}
const aliasOfConfigureFunctionMode = (() => {
if (typeof vueConfig.configureWebpack === 'function') {
let originConfig = chainableConfig.toConfig()
const res = vueConfig.configureWebpack(originConfig)
let originConfig
let res
try {
originConfig = chainableConfig.toConfig()
res = vueConfig.configureWebpack(originConfig)
} catch (e) {
console.error('\nTransforming configureWebpack config failed. Please manually convert it.')
console.error(e)
console.log('skip transforming the configureWebpack...')
}
originConfig = merge(originConfig, res)
if (res) {
return res.resolve.alias || {}
Expand Down

0 comments on commit 28a8db3

Please sign in to comment.