diff --git a/packages/@vue/cli-service/__tests__/Service.spec.js b/packages/@vue/cli-service/__tests__/Service.spec.js index 9a0d769209..75c3e03d16 100644 --- a/packages/@vue/cli-service/__tests__/Service.spec.js +++ b/packages/@vue/cli-service/__tests__/Service.spec.js @@ -52,6 +52,18 @@ test('load project options from package.json', () => { expect(service.projectOptions.lintOnSave).toBe(true) }) +test('handle option baseUrl and outputDir correctly', () => { + mockPkg({ + vue: { + baseUrl: 'https://foo.com/bar', + outputDir: '/public/' + } + }) + const service = createMockService() + expect(service.projectOptions.baseUrl).toBe('https://foo.com/bar/') + expect(service.projectOptions.outputDir).toBe('public') +}) + test('load project options from vue.config.js', () => { process.env.VUE_CLI_SERVICE_CONFIG_PATH = `/vue.config.js` fs.writeFileSync('/vue.config.js', `module.exports = { lintOnSave: false }`) diff --git a/packages/@vue/cli-service/lib/Service.js b/packages/@vue/cli-service/lib/Service.js index c903ff9aac..a2b1e776b0 100644 --- a/packages/@vue/cli-service/lib/Service.js +++ b/packages/@vue/cli-service/lib/Service.js @@ -222,10 +222,12 @@ module.exports = class Service { } function ensureSlash (config, key) { - if (typeof config[key] === 'string') { - config[key] = config[key] - .replace(/^([^/.])/, '/$1') - .replace(/([^/])$/, '$1/') + let val = config[key] + if (typeof val === 'string') { + if (!/^https?:/.test(val)) { + val = val.replace(/^([^/.])/, '/$1') + } + config[key] = val.replace(/([^/])$/, '$1/') } }