From dd6b6b136962e73d49f316812d4a3d83d155bc0b Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Thu, 7 Jun 2018 13:10:05 -0400 Subject: [PATCH 01/10] fixed broken plugin dev link on contributing guide --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9fc37dbed5..56e1fd9971 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -52,4 +52,4 @@ Note that `jest --onlyChanged` isn't always accurate because some tests spawn ch ### Plugin Development -See [dedicated section in docs](https://github.com/vuejs/vue-cli/tree/dev/docs/plugin-dev.md). +See [dedicated section in docs](https://github.com/vuejs/vue-cli/blob/dev/docs/dev-guide/plugin-dev.md). From ef6c65d5262ecc0f782566a3a97626a9a1d5950d Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Fri, 8 Jun 2018 14:41:49 -0400 Subject: [PATCH 02/10] feat(cli-service): vue config command added --- packages/@vue/cli/bin/vue.js | 11 +++++++++++ packages/@vue/cli/lib/config.js | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 packages/@vue/cli/lib/config.js diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index d9c5367deb..8105baeaf2 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -116,6 +116,17 @@ program loadCommand('init', '@vue/cli-init') }) +program + .command('config') + .description('inspect and modify the config') + .option('get ') + .option('set ') + .option('delete ', 'delete preset from config') + .option('edit', 'open config with default editor') + .action((cmd) => { + require('../lib/config')(cleanArgs(cmd)) + }) + // output help information on unknown commands program .arguments('') diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js new file mode 100644 index 0000000000..1c69d9ad75 --- /dev/null +++ b/packages/@vue/cli/lib/config.js @@ -0,0 +1,17 @@ +const fs = require('fs') +const homedir = require('os').homedir() +const { error } = require('@vue/cli-shared-utils') + +async function config (options) { + const path = homedir + '/' + '.vuerc' + await fs.readFile(path, 'utf-8', (err, data) => { + if (err) error(err) + console.log(data, '\n', path) + }) +} + +module.exports = (...args) => { + return config(...args).catch(err => { + error(err) + }) +} From 9f49380225d6dd63205f0c7387bf06c8f85be6fb Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Fri, 8 Jun 2018 14:41:49 -0400 Subject: [PATCH 03/10] feat(cli-service): vue config command added --- packages/@vue/cli/bin/vue.js | 11 +++++++++++ packages/@vue/cli/lib/config.js | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 packages/@vue/cli/lib/config.js diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index d9c5367deb..8105baeaf2 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -116,6 +116,17 @@ program loadCommand('init', '@vue/cli-init') }) +program + .command('config') + .description('inspect and modify the config') + .option('get ') + .option('set ') + .option('delete ', 'delete preset from config') + .option('edit', 'open config with default editor') + .action((cmd) => { + require('../lib/config')(cleanArgs(cmd)) + }) + // output help information on unknown commands program .arguments('') diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js new file mode 100644 index 0000000000..1c69d9ad75 --- /dev/null +++ b/packages/@vue/cli/lib/config.js @@ -0,0 +1,17 @@ +const fs = require('fs') +const homedir = require('os').homedir() +const { error } = require('@vue/cli-shared-utils') + +async function config (options) { + const path = homedir + '/' + '.vuerc' + await fs.readFile(path, 'utf-8', (err, data) => { + if (err) error(err) + console.log(data, '\n', path) + }) +} + +module.exports = (...args) => { + return config(...args).catch(err => { + error(err) + }) +} From b529a4769f8d485c311f170406d7c722c5b07d9e Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Tue, 12 Jun 2018 09:47:34 -0400 Subject: [PATCH 04/10] feat(cli-service): added config commands get and delete --- packages/@vue/cli/bin/vue.js | 8 ++++---- packages/@vue/cli/lib/config.js | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index 8105baeaf2..56bd854c3d 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -119,10 +119,10 @@ program program .command('config') .description('inspect and modify the config') - .option('get ') - .option('set ') - .option('delete ', 'delete preset from config') - .option('edit', 'open config with default editor') + .option('-g, --get ') + .option('-s, --set ') + .option('-d, --delete ', 'delete preset from config') + .option('-e, --edit', 'open config with default editor') .action((cmd) => { require('../lib/config')(cleanArgs(cmd)) }) diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index 1c69d9ad75..c284145965 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -8,6 +8,20 @@ async function config (options) { if (err) error(err) console.log(data, '\n', path) }) + + const config = JSON.parse(fs.readFileSync(path, 'utf-8')) + + if (options.get) { + console.log(config[options.get]) + } + + if (options.delete) { + delete config[options.delete] + await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { + if (err) error(err) + console.log(`You have removed the preset: ${options.delete}`) + }) + } } module.exports = (...args) => { From de9bd6de80dca82a4867d8a314343d73d4d2d647 Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Tue, 12 Jun 2018 13:01:44 -0400 Subject: [PATCH 05/10] feat(cli-service): added vue edit command and opn dependcy --- packages/@vue/cli/lib/config.js | 6 ++++++ packages/@vue/cli/package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index c284145965..8bad7e91ba 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -1,5 +1,6 @@ const fs = require('fs') const homedir = require('os').homedir() +const opn = require('opn') const { error } = require('@vue/cli-shared-utils') async function config (options) { @@ -22,6 +23,11 @@ async function config (options) { console.log(`You have removed the preset: ${options.delete}`) }) } + + if (options.edit) { + opn(path, { app: process.env.EDITOR }) + process.exit() + } } module.exports = (...args) => { diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index d2d8f3e4dc..ad6cc902bf 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -48,6 +48,7 @@ "klaw-sync": "^3.0.2", "lodash.clonedeep": "^4.5.0", "minimist": "^1.2.0", + "opn": "^5.3.0", "recast": "^0.13.0", "request": "^2.83.0", "request-promise-native": "^1.0.5", From 6c3a5193792c863fd8f05730bd9e4058dc3c963c Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Tue, 12 Jun 2018 16:11:42 -0400 Subject: [PATCH 06/10] feat(cli-service): added vue config set command and vue config check --- packages/@vue/cli/bin/vue.js | 10 ++++----- packages/@vue/cli/lib/config.js | 36 +++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index 56bd854c3d..4e64f99995 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -117,14 +117,14 @@ program }) program - .command('config') + .command('config [value]') .description('inspect and modify the config') - .option('-g, --get ') - .option('-s, --set ') + .option('-g, --get ', 'get value from preset') + .option('-s, --set ', 'set preset value') .option('-d, --delete ', 'delete preset from config') .option('-e, --edit', 'open config with default editor') - .action((cmd) => { - require('../lib/config')(cleanArgs(cmd)) + .action((value, cmd) => { + require('../lib/config')(value, cleanArgs(cmd)) }) // output help information on unknown commands diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index 8bad7e91ba..00a031b1a2 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -3,15 +3,14 @@ const homedir = require('os').homedir() const opn = require('opn') const { error } = require('@vue/cli-shared-utils') -async function config (options) { +async function config (value, options) { const path = homedir + '/' + '.vuerc' - await fs.readFile(path, 'utf-8', (err, data) => { - if (err) error(err) - console.log(data, '\n', path) - }) - const config = JSON.parse(fs.readFileSync(path, 'utf-8')) + if (!options.delete && !options.get && !options.edit && !options.set) { + console.log('Resolved path: ' + path + '\n', JSON.stringify(config, null, 4)) + } + if (options.get) { console.log(config[options.get]) } @@ -28,6 +27,31 @@ async function config (options) { opn(path, { app: process.env.EDITOR }) process.exit() } + + if (options.set && !value) { + error(`Make sure you define a value for the preset ${options.set}`) + } + + if (options.set && value) { + config[options.set] = value + + if (value.match('[0-9]')) { + config[options.set] = parseInt(value) + } + + if (value === 'true') { + config[options.set] = true + } + + if (value === 'false') { + config[options.set] = false + } + + await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { + if (err) error(err) + console.log(`You have updated the preset: ${options.set} to ${value}`) + }) + } } module.exports = (...args) => { From aa6e9fc10115e644bc06f0ac6526c5bdfbbf19bb Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Wed, 13 Jun 2018 16:18:39 -0400 Subject: [PATCH 07/10] feat(cli-service): nested path support and command/logs adjustment --- packages/@vue/cli/lib/config.js | 21 ++++++++++++--------- packages/@vue/cli/package.json | 3 +++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index 00a031b1a2..7ce568ef56 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -1,5 +1,8 @@ const fs = require('fs') const homedir = require('os').homedir() +const get = require('get-value') +const unset = require('unset-value') +const set = require('set-value') const opn = require('opn') const { error } = require('@vue/cli-shared-utils') @@ -12,14 +15,14 @@ async function config (value, options) { } if (options.get) { - console.log(config[options.get]) + console.log(get(config, options.get)) } if (options.delete) { - delete config[options.delete] + unset(config, options.delete) await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { if (err) error(err) - console.log(`You have removed the preset: ${options.delete}`) + console.log(`You have removed the option: ${options.delete}`) }) } @@ -29,27 +32,27 @@ async function config (value, options) { } if (options.set && !value) { - error(`Make sure you define a value for the preset ${options.set}`) + error(`Make sure you define a value for the option ${options.set}`) } if (options.set && value) { - config[options.set] = value + set(config, options.set, value) if (value.match('[0-9]')) { - config[options.set] = parseInt(value) + set(config, options.set, parseInt(value)) } if (value === 'true') { - config[options.set] = true + set(config, options.set, true) } if (value === 'false') { - config[options.set] = false + set(config, options.set, false) } await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { if (err) error(err) - console.log(`You have updated the preset: ${options.set} to ${value}`) + console.log(`You have updated the option: ${options.set} to ${value}`) }) } } diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index ad6cc902bf..54d7ac3b90 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -39,6 +39,7 @@ "ejs": "^2.5.7", "execa": "^0.10.0", "fs-extra": "^6.0.0", + "get-value": "^3.0.1", "globby": "^8.0.1", "import-global": "^0.1.0", "inquirer": "^6.0.0", @@ -54,7 +55,9 @@ "request-promise-native": "^1.0.5", "resolve": "^1.5.0", "semver": "^5.4.1", + "set-value": "^3.0.0", "slash": "^1.0.0", + "unset-value": "^1.0.0", "validate-npm-package-name": "^3.0.0", "yaml-front-matter": "^3.4.1" }, From 0ad1f3a2dd62912400287f19b67bce6f7caf158a Mon Sep 17 00:00:00 2001 From: beardedpayton Date: Fri, 6 Jul 2018 10:25:20 -0400 Subject: [PATCH 08/10] feat(cli-service): command option descriptions updated with preset --- packages/@vue/cli/bin/vue.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index 4e64f99995..521d69845e 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -119,9 +119,9 @@ program program .command('config [value]') .description('inspect and modify the config') - .option('-g, --get ', 'get value from preset') - .option('-s, --set ', 'set preset value') - .option('-d, --delete ', 'delete preset from config') + .option('-g, --get ', 'get value from option') + .option('-s, --set ', 'set option value') + .option('-d, --delete ', 'delete option from config') .option('-e, --edit', 'open config with default editor') .action((value, cmd) => { require('../lib/config')(value, cleanArgs(cmd)) From 8f5ec3ba14612090b8058d5772093ef5e2cc143b Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Wed, 11 Jul 2018 23:47:04 +0200 Subject: [PATCH 09/10] refactor: object get/set/unset --- packages/@vue/cli-service/lib/commands/inspect.js | 2 +- packages/@vue/cli-service/package.json | 1 - packages/@vue/cli-shared-utils/index.js | 1 + .../{cli-ui/src/util => cli-shared-utils/lib}/object.js | 2 +- .../cli-ui/apollo-server/connectors/configurations.js | 4 ++-- packages/@vue/cli-ui/apollo-server/connectors/prompts.js | 8 ++++---- packages/@vue/cli/lib/config.js | 4 +--- packages/@vue/cli/package.json | 2 -- yarn.lock | 6 ------ 9 files changed, 10 insertions(+), 20 deletions(-) rename packages/@vue/{cli-ui/src/util => cli-shared-utils/lib}/object.js (95%) diff --git a/packages/@vue/cli-service/lib/commands/inspect.js b/packages/@vue/cli-service/lib/commands/inspect.js index b07d16b6b3..70a1b86500 100644 --- a/packages/@vue/cli-service/lib/commands/inspect.js +++ b/packages/@vue/cli-service/lib/commands/inspect.js @@ -11,7 +11,7 @@ module.exports = (api, options) => { '--verbose': 'show full function definitions in output' } }, args => { - const get = require('get-value') + const { get } = require('@vue/cli-shared-utils') const { toString } = require('webpack-chain') const config = api.resolveWebpackConfig() const { _: paths, verbose } = args diff --git a/packages/@vue/cli-service/package.json b/packages/@vue/cli-service/package.json index 32627deb0c..0ce7787dc9 100644 --- a/packages/@vue/cli-service/package.json +++ b/packages/@vue/cli-service/package.json @@ -41,7 +41,6 @@ "file-loader": "^1.1.11", "friendly-errors-webpack-plugin": "^1.7.0", "fs-extra": "^6.0.1", - "get-value": "^3.0.1", "globby": "^8.0.1", "hash-sum": "^1.0.2", "html-webpack-plugin": "^3.2.0", diff --git a/packages/@vue/cli-shared-utils/index.js b/packages/@vue/cli-shared-utils/index.js index 4fc0499971..e895a028b1 100644 --- a/packages/@vue/cli-shared-utils/index.js +++ b/packages/@vue/cli-shared-utils/index.js @@ -3,6 +3,7 @@ 'exit', 'ipc', 'logger', + 'object', 'openBrowser', 'pluginResolution', 'request', diff --git a/packages/@vue/cli-ui/src/util/object.js b/packages/@vue/cli-shared-utils/lib/object.js similarity index 95% rename from packages/@vue/cli-ui/src/util/object.js rename to packages/@vue/cli-shared-utils/lib/object.js index 2b0b71579d..46e3b1bc0c 100644 --- a/packages/@vue/cli-ui/src/util/object.js +++ b/packages/@vue/cli-shared-utils/lib/object.js @@ -26,7 +26,7 @@ exports.get = function (target, path) { return obj[fields[l - 1]] } -exports.remove = function (target, path) { +exports.unset = function (target, path) { const fields = path.split('.') let obj = target const l = fields.length diff --git a/packages/@vue/cli-ui/apollo-server/connectors/configurations.js b/packages/@vue/cli-ui/apollo-server/connectors/configurations.js index 71e78750f8..93aaf0c652 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/configurations.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/configurations.js @@ -9,7 +9,7 @@ const plugins = require('./plugins') const folders = require('./folders') const prompts = require('./prompts') // Utils -const { get, set, remove } = require('../../src/util/object') +const { get, set, unset } = require('@vue/cli-shared-utils') const { log } = require('../util/logger') const { loadModule } = require('@vue/cli/lib/util/module') const extendJSConfig = require('@vue/cli/lib/util/extendJSConfig') @@ -232,7 +232,7 @@ async function save (id, context) { const value = newData[key] if (typeof value === 'undefined') { - remove(data[fileId], key) + unset(data[fileId], key) } else { set(data[fileId], key, value) } diff --git a/packages/@vue/cli-ui/apollo-server/connectors/prompts.js b/packages/@vue/cli-ui/apollo-server/connectors/prompts.js index 421c4dfbac..5ec9d14751 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/prompts.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/prompts.js @@ -1,5 +1,5 @@ // Utils -const ObjectUtil = require('../../src/util/object') +const { get, set, unset } = require('@vue/cli-shared-utils') const { log } = require('../util/logger') let answers = {} @@ -85,11 +85,11 @@ async function getChoices (prompt) { } function setAnswer (id, value) { - ObjectUtil.set(answers, id, value) + set(answers, id, value) } function removeAnswer (id) { - ObjectUtil.remove(answers, id) + unset(answers, id) } function generatePrompt (data) { @@ -159,7 +159,7 @@ function getAnswers () { } function getAnswer (id) { - return ObjectUtil.get(answers, id) + return get(answers, id) } async function reset () { diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index 7ce568ef56..03ebc7aa06 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -1,8 +1,6 @@ const fs = require('fs') const homedir = require('os').homedir() -const get = require('get-value') -const unset = require('unset-value') -const set = require('set-value') +const { get, set, unset } = require('@vue/cli-shared-utils') const opn = require('opn') const { error } = require('@vue/cli-shared-utils') diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index 782fa34fed..93cec36707 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -39,7 +39,6 @@ "ejs": "^2.6.1", "execa": "^0.10.0", "fs-extra": "^6.0.1", - "get-value": "^3.0.1", "globby": "^8.0.1", "import-global": "^0.1.0", "inquirer": "^6.0.0", @@ -50,7 +49,6 @@ "lodash.clonedeep": "^4.5.0", "minimist": "^1.2.0", "opn": "^5.3.0", - "unset-value": "^1.0.0", "recast": "^0.15.2", "request": "^2.87.0", "request-promise-native": "^1.0.5", diff --git a/yarn.lock b/yarn.lock index 466c283179..cc6be040ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5476,12 +5476,6 @@ get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -get-value@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-3.0.1.tgz#5efd2a157f1d6a516d7524e124ac52d0a39ef5a8" - dependencies: - isobject "^3.0.1" - getos@2.8.4: version "2.8.4" resolved "https://registry.yarnpkg.com/getos/-/getos-2.8.4.tgz#7b8603d3619c28e38cb0fe7a4f63c3acb80d5163" From 75f6188fb7e47a1d42c51bfcc43872cc42cafc0c Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Thu, 12 Jul 2018 00:19:39 +0200 Subject: [PATCH 10/10] feat: json option + fs/JSON fixes --- packages/@vue/cli/bin/vue.js | 1 + packages/@vue/cli/lib/config.js | 58 +++++++++++++++++++++++---------- packages/@vue/cli/package.json | 2 +- 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index 096f2085a1..29f5040020 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -133,6 +133,7 @@ program .option('-s, --set ', 'set option value') .option('-d, --delete ', 'delete option from config') .option('-e, --edit', 'open config with default editor') + .option('--json', 'outputs JSON result only') .action((value, cmd) => { require('../lib/config')(value, cleanArgs(cmd)) }) diff --git a/packages/@vue/cli/lib/config.js b/packages/@vue/cli/lib/config.js index 03ebc7aa06..017d910e9a 100644 --- a/packages/@vue/cli/lib/config.js +++ b/packages/@vue/cli/lib/config.js @@ -1,36 +1,53 @@ -const fs = require('fs') +const fs = require('fs-extra') +const path = require('path') const homedir = require('os').homedir() -const { get, set, unset } = require('@vue/cli-shared-utils') -const opn = require('opn') -const { error } = require('@vue/cli-shared-utils') +const { get, set, unset, error } = require('@vue/cli-shared-utils') +const launch = require('launch-editor') async function config (value, options) { - const path = homedir + '/' + '.vuerc' - const config = JSON.parse(fs.readFileSync(path, 'utf-8')) + const file = path.resolve(homedir, '.vuerc') + const config = await fs.readJson(file) if (!options.delete && !options.get && !options.edit && !options.set) { - console.log('Resolved path: ' + path + '\n', JSON.stringify(config, null, 4)) + if (options.json) { + console.log(JSON.stringify({ + resolvedPath: file, + content: config + })) + } else { + console.log('Resolved path: ' + file + '\n', JSON.stringify(config, null, 2)) + } } if (options.get) { - console.log(get(config, options.get)) + const value = get(config, options.get) + if (options.json) { + console.log(JSON.stringify({ + value + })) + } else { + console.log(value) + } } if (options.delete) { unset(config, options.delete) - await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { - if (err) error(err) + await fs.writeFile(file, JSON.stringify(config, null, 2), 'utf-8') + if (options.json) { + console.log(JSON.stringify({ + deleted: options.delete + })) + } else { console.log(`You have removed the option: ${options.delete}`) - }) + } } if (options.edit) { - opn(path, { app: process.env.EDITOR }) - process.exit() + launch(file) } if (options.set && !value) { - error(`Make sure you define a value for the option ${options.set}`) + throw new Error(`Make sure you define a value for the option ${options.set}`) } if (options.set && value) { @@ -48,15 +65,22 @@ async function config (value, options) { set(config, options.set, false) } - await fs.writeFile(path, JSON.stringify(config, null, 4), 'utf-8', (err) => { - if (err) error(err) + await fs.writeFile(file, JSON.stringify(config, null, 2), 'utf-8') + if (options.json) { + console.log(JSON.stringify({ + updated: options.set + })) + } else { console.log(`You have updated the option: ${options.set} to ${value}`) - }) + } } } module.exports = (...args) => { return config(...args).catch(err => { error(err) + if (!process.env.VUE_CLI_TEST) { + process.exit(1) + } }) } diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index 93cec36707..b48fcfff04 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -46,9 +46,9 @@ "javascript-stringify": "^1.6.0", "js-yaml": "^3.12.0", "klaw-sync": "^4.0.0", + "launch-editor": "^2.2.1", "lodash.clonedeep": "^4.5.0", "minimist": "^1.2.0", - "opn": "^5.3.0", "recast": "^0.15.2", "request": "^2.87.0", "request-promise-native": "^1.0.5",