From 017e7b9626510018f84379afef765c84f4f838c8 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Fri, 11 May 2018 13:38:41 +0200 Subject: [PATCH] fix(ui): config: create first file if no file exists --- .../graphql-api/connectors/configurations.js | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/packages/@vue/cli-ui/src/graphql-api/connectors/configurations.js b/packages/@vue/cli-ui/src/graphql-api/connectors/configurations.js index 272d2925af..7225ddef9e 100644 --- a/packages/@vue/cli-ui/src/graphql-api/connectors/configurations.js +++ b/packages/@vue/cli-ui/src/graphql-api/connectors/configurations.js @@ -1,7 +1,8 @@ -const fs = require('fs') +const fs = require('fs-extra') const path = require('path') const yaml = require('js-yaml') const clone = require('clone') +const stringifyJS = require('javascript-stringify') // Connectors const cwd = require('./cwd') const plugins = require('./plugins') @@ -52,6 +53,25 @@ function findFile (config, context) { } } +function getDefaultFile (config, context) { + if (!config.files) { + return null + } + + const keys = Object.keys(config.files) + if (keys.length) { + for (const key of keys) { + if (key !== 'package') { + const file = config.files[key][0] + return { + type: key, + path: path.resolve(cwd.get(), file) + } + } + } + } +} + function readData (config, context) { const file = findFile(config, context) config.file = file @@ -74,9 +94,15 @@ function readData (config, context) { } function writeData ({ config, data, changedFields }, context) { - const file = findFile(config, context) + let file = findFile(config, context) + + if (!file) { + file = getDefaultFile(config, context) + } + if (file) { - log('Config write', config.id, data, changedFields) + log('Config write', config.id, data, changedFields, file.path) + fs.ensureFileSync(file.path) let rawContent if (file.type === 'package') { const pkg = folders.readPackage(cwd.get(), context) @@ -88,12 +114,16 @@ function writeData ({ config, data, changedFields }, context) { } else if (file.type === 'yaml') { rawContent = yaml.safeDump(data) } else if (file.type === 'js') { - const changedData = changedFields.reduce((obj, field) => { - obj[field] = data[field] - return obj - }, {}) - const source = fs.readFileSync(file.path, { encoding: 'utf8' }) - rawContent = extendJSConfig(changedData, source) + let source = fs.readFileSync(file.path, { encoding: 'utf8' }) + if (!source.trim()) { + rawContent = `module.exports = ${stringifyJS(data, null, 2)}` + } else { + const changedData = changedFields.reduce((obj, field) => { + obj[field] = data[field] + return obj + }, {}) + rawContent = extendJSConfig(changedData, source) + } } } fs.writeFileSync(file.path, rawContent, { encoding: 'utf8' })