|
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