|
1 | 1 | const fs = require('fs')
|
2 | 2 | const path = require('path')
|
3 | 3 | const debug = require('debug')
|
4 |
| -const chalk = require('chalk') |
5 | 4 | const readPkg = require('read-pkg')
|
6 | 5 | const merge = require('webpack-merge')
|
7 | 6 | const deepMerge = require('deepmerge')
|
8 | 7 | const Config = require('webpack-chain')
|
9 | 8 | const PluginAPI = require('./PluginAPI')
|
10 | 9 | const loadEnv = require('./util/loadEnv')
|
11 |
| -const { warn, error } = require('@vue/cli-shared-utils') |
| 10 | +const cosmiconfig = require('cosmiconfig') |
| 11 | +const { error } = require('@vue/cli-shared-utils') |
12 | 12 |
|
13 | 13 | const { defaults, validate } = require('./options')
|
14 | 14 |
|
@@ -150,45 +150,24 @@ module.exports = class Service {
|
150 | 150 | }
|
151 | 151 |
|
152 | 152 | loadProjectOptions (inlineOptions) {
|
153 |
| - // vue.config.js |
154 |
| - let fileConfig, pkgConfig, resolved |
155 |
| - const configPath = ( |
156 |
| - process.env.VUE_CLI_SERVICE_CONFIG_PATH || |
157 |
| - path.resolve(this.context, 'vue.config.js') |
158 |
| - ) |
159 |
| - try { |
160 |
| - fileConfig = require(configPath) |
161 |
| - if (!fileConfig || typeof fileConfig !== 'object') { |
| 153 | + let resolved |
| 154 | + if (this.pkg.vue) { |
| 155 | + resolved = this.pkg.vue |
| 156 | + } else { |
| 157 | + const explorer = cosmiconfig('vue', { |
| 158 | + sync: true, |
| 159 | + stopDir: this.context |
| 160 | + }) |
| 161 | + try { |
| 162 | + const res = explorer.load(this.context) |
| 163 | + if (res) resolved = res.config |
| 164 | + } catch (e) { |
162 | 165 | error(
|
163 |
| - `Error loading ${chalk.bold('vue.config.js')}: should export an object.` |
164 |
| - ) |
165 |
| - fileConfig = null |
166 |
| - } |
167 |
| - } catch (e) {} |
168 |
| - |
169 |
| - // package.vue |
170 |
| - pkgConfig = this.pkg.vue |
171 |
| - if (pkgConfig && typeof pkgConfig !== 'object') { |
172 |
| - error( |
173 |
| - `Error loading vue-cli config in ${chalk.bold(`package.json`)}: ` + |
174 |
| - `the "vue" field should be an object.` |
175 |
| - ) |
176 |
| - pkgConfig = null |
177 |
| - } |
178 |
| - |
179 |
| - if (fileConfig) { |
180 |
| - if (pkgConfig) { |
181 |
| - warn( |
182 |
| - `"vue" field in ${chalk.bold(`package.json`)} ignored ` + |
183 |
| - `due to presence of ${chalk.bold('vue.config.js')}.` |
| 166 | + `Error loading vue-cli config: ${e.message}` |
184 | 167 | )
|
185 | 168 | }
|
186 |
| - resolved = fileConfig |
187 |
| - } else if (pkgConfig) { |
188 |
| - resolved = pkgConfig |
189 |
| - } else { |
190 |
| - resolved = inlineOptions || {} |
191 | 169 | }
|
| 170 | + resolved = resolved || inlineOptions || {} |
192 | 171 |
|
193 | 172 | // normlaize some options
|
194 | 173 | ensureSlash(resolved, 'base')
|
|
0 commit comments