1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const path = require('path')
- const { chalk, warn, error } = require('@vue/cli-shared-utils')
- const { validate } = require('../options')
- function ensureSlash (config, key) {
- const val = config[key]
- if (typeof val === 'string') {
- config[key] = val.replace(/([^/])$/, '$1/')
- }
- }
- function removeSlash (config, key) {
- if (typeof config[key] === 'string') {
- config[key] = config[key].replace(/\/$/g, '')
- }
- }
- module.exports = function resolveUserConfig ({
- inlineOptions,
- pkgConfig,
- fileConfig,
- fileConfigPath
- }) {
- if (fileConfig) {
- if (typeof fileConfig === 'function') {
- fileConfig = fileConfig()
- }
- if (!fileConfig || typeof fileConfig !== 'object') {
- throw new Error(
- `Error loading ${chalk.bold(fileConfigPath)}: ` +
- `should export an object or a function that returns object.`
- )
- }
- }
- // package.vue
- if (pkgConfig && typeof pkgConfig !== 'object') {
- throw new Error(
- `Error loading Vue CLI config in ${chalk.bold(`package.json`)}: ` +
- `the "vue" field should be an object.`
- )
- }
- let resolved, resolvedFrom
- if (fileConfig) {
- const configFileName = path.basename(fileConfigPath)
- if (pkgConfig) {
- warn(
- `"vue" field in package.json ignored ` +
- `due to presence of ${chalk.bold(configFileName)}.`
- )
- warn(
- `You should migrate it into ${chalk.bold(configFileName)} ` +
- `and remove it from package.json.`
- )
- }
- resolved = fileConfig
- resolvedFrom = configFileName
- } else if (pkgConfig) {
- resolved = pkgConfig
- resolvedFrom = '"vue" field in package.json'
- } else {
- resolved = inlineOptions || {}
- resolvedFrom = 'inline options'
- }
- // normalize some options
- if (resolved.publicPath !== 'auto') {
- ensureSlash(resolved, 'publicPath')
- }
- if (typeof resolved.publicPath === 'string') {
- resolved.publicPath = resolved.publicPath.replace(/^\.\//, '')
- }
- removeSlash(resolved, 'outputDir')
- // validate options
- validate(resolved, msg => {
- error(`Invalid options in ${chalk.bold(resolvedFrom)}: ${msg}`)
- })
- return resolved
- }
|