From 98a94b7e948f508b5c70f6c67dfd308a6d5b8eef Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Sun, 17 Feb 2019 13:37:06 +0800 Subject: [PATCH] refactor: use `dotenv` to parse env file and add a link to its docs --- docs/guide/mode-and-env.md | 2 ++ packages/@vue/cli-service/lib/Service.js | 4 +-- packages/@vue/cli-service/lib/util/loadEnv.js | 36 ------------------- packages/@vue/cli-service/package.json | 1 + yarn.lock | 5 +++ 5 files changed, 10 insertions(+), 38 deletions(-) delete mode 100644 packages/@vue/cli-service/lib/util/loadEnv.js diff --git a/docs/guide/mode-and-env.md b/docs/guide/mode-and-env.md index 94fcbc9404..2342d8a87a 100644 --- a/docs/guide/mode-and-env.md +++ b/docs/guide/mode-and-env.md @@ -16,6 +16,8 @@ FOO=bar VUE_APP_SECRET=secret ``` +For more detailed env parsing rules, please refer to [the documentation of `dotenv`](https://github.com/motdotla/dotenv#rules). + Loaded variables will become available to all `vue-cli-service` commands, plugins and dependencies. ::: tip Env Loading Priorities diff --git a/packages/@vue/cli-service/lib/Service.js b/packages/@vue/cli-service/lib/Service.js index 37cc107321..911656f342 100644 --- a/packages/@vue/cli-service/lib/Service.js +++ b/packages/@vue/cli-service/lib/Service.js @@ -6,7 +6,7 @@ const readPkg = require('read-pkg') const merge = require('webpack-merge') const Config = require('webpack-chain') const PluginAPI = require('./PluginAPI') -const loadEnv = require('./util/loadEnv') +const dotenv = require('dotenv') const defaultsDeep = require('lodash.defaultsdeep') const { warn, error, isPlugin, loadModule } = require('@vue/cli-shared-utils') @@ -95,7 +95,7 @@ module.exports = class Service { const load = path => { try { - const res = loadEnv(path) + const res = dotenv.config({ path, debug: process.env.DEBUG }) logger(path, res) } catch (err) { // only ignore error if file is not found diff --git a/packages/@vue/cli-service/lib/util/loadEnv.js b/packages/@vue/cli-service/lib/util/loadEnv.js deleted file mode 100644 index e1a2c6e917..0000000000 --- a/packages/@vue/cli-service/lib/util/loadEnv.js +++ /dev/null @@ -1,36 +0,0 @@ -const fs = require('fs') - -module.exports = function loadEnv (path = '.env') { - const config = parse(fs.readFileSync(path, 'utf-8')) - Object.keys(config).forEach(key => { - if (typeof process.env[key] === 'undefined') { - process.env[key] = config[key] - } - }) - return config -} - -function parse (src) { - const res = {} - src.split('\n').forEach(line => { - // matching "KEY' and 'VAL' in 'KEY=VAL' - const keyValueArr = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/) - // matched? - if (keyValueArr != null) { - const key = keyValueArr[1] - let value = keyValueArr[2] || '' - - // expand newlines in quoted values - const len = value ? value.length : 0 - if (len > 0 && value.charAt(0) === '"' && value.charAt(len - 1) === '"') { - value = value.replace(/\\n/gm, '\n') - } - - // remove any surrounding quotes and extra spaces - value = value.replace(/(^['"]|['"]$)/g, '').trim() - - res[key] = value - } - }) - return res -} diff --git a/packages/@vue/cli-service/package.json b/packages/@vue/cli-service/package.json index 25dff8e02b..b14daae0ce 100644 --- a/packages/@vue/cli-service/package.json +++ b/packages/@vue/cli-service/package.json @@ -42,6 +42,7 @@ "css-loader": "^1.0.1", "cssnano": "^4.1.8", "debug": "^4.1.1", + "dotenv": "^6.2.0", "escape-string-regexp": "^1.0.5", "file-loader": "^3.0.1", "fs-extra": "^7.0.1", diff --git a/yarn.lock b/yarn.lock index 35941623d8..10ea11dc9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6059,6 +6059,11 @@ dot-prop@^4.1.0, dot-prop@^4.1.1, dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" +dotenv@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + download-git-repo@^1.0.1, download-git-repo@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/download-git-repo/-/download-git-repo-1.1.0.tgz#7dc88a82ced064b1372a0002f8a3aebf10eb1d3c"