From 3db31abb058622efba83db14feeded5880446ddc Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 28 May 2020 18:27:49 +0200 Subject: [PATCH] feat(config): support `.nuxtrc` (#7430) [release] --- .gitignore | 1 + packages/config/package.json | 1 + packages/config/src/load.js | 12 ++++++++++- packages/config/test/fixtures/nuxtrc/.nuxtrc | 1 + packages/config/test/load.test.js | 10 ++++++++++ yarn.lock | 21 ++++++++++++++++++++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 packages/config/test/fixtures/nuxtrc/.nuxtrc create mode 100644 packages/config/test/load.test.js diff --git a/.gitignore b/.gitignore index 86a8924ae1..598792ed1b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ distributions/*/LICENSE # Other .nuxt* !.nuxtignore +!.nuxtrc .cache # Dist folders diff --git a/packages/config/package.json b/packages/config/package.json index 4523d60794..8e3eadb8cf 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -16,6 +16,7 @@ "destr": "^0.1.9", "dotenv": "^8.2.0", "esm": "^3.2.25", + "rc9": "^0.0.6", "std-env": "^2.2.1" }, "publishConfig": { diff --git a/packages/config/src/load.js b/packages/config/src/load.js index d021552683..65ecc617be 100644 --- a/packages/config/src/load.js +++ b/packages/config/src/load.js @@ -6,6 +6,7 @@ import dotenv from 'dotenv' import { clearRequireCache, scanRequireTree } from '@nuxt/utils' import esm from 'esm' import destr from 'destr' +import * as rc from 'rc9' import { defaultNuxtConfigFile } from './config' export async function loadNuxtConfig ({ @@ -71,7 +72,7 @@ export async function loadNuxtConfig ({ } // Don't mutate options export - options = defu(configOverrides, options) + options = { ...options } // Keep _nuxtConfigFile for watching options._nuxtConfigFile = configFile @@ -87,6 +88,15 @@ export async function loadNuxtConfig ({ options.rootDir = rootDir } + // Load Combine configs + // Priority: configOverrides > nuxtConfig > .nuxtrc > .nuxtrc (global) + options = defu( + configOverrides, + options, + rc.read({ name: '.nuxtrc', dir: options.rootDir }), + rc.readUser('.nuxtrc') + ) + // Load env to options._env options._env = env options._envConfig = envConfig diff --git a/packages/config/test/fixtures/nuxtrc/.nuxtrc b/packages/config/test/fixtures/nuxtrc/.nuxtrc new file mode 100644 index 0000000000..b09ab7a0c2 --- /dev/null +++ b/packages/config/test/fixtures/nuxtrc/.nuxtrc @@ -0,0 +1 @@ +rc.works=true diff --git a/packages/config/test/load.test.js b/packages/config/test/load.test.js new file mode 100644 index 0000000000..4c05f87509 --- /dev/null +++ b/packages/config/test/load.test.js @@ -0,0 +1,10 @@ + +import { resolve } from 'path' +import { loadNuxtConfig } from '../src/load' + +describe('config: load', () => { + test('load local nuxtrc', async () => { + const config = await loadNuxtConfig({ rootDir: resolve(__dirname, 'fixtures/nuxtrc') }) + expect(config.rc.works).toBe(true) + }) +}) diff --git a/yarn.lock b/yarn.lock index e7780e0bc6..2ffa8929b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6184,6 +6184,13 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.0.tgz#dab7d71d60413becb0ac2de9bf4304495e3af6af" + integrity sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA== + dependencies: + is-buffer "~2.0.4" + flatted@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" @@ -7255,6 +7262,11 @@ is-buffer@^1.1.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@~2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" @@ -10960,6 +10972,15 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +rc9@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/rc9/-/rc9-0.0.6.tgz#5943a94dcec5070093134203c8e4909157a4c235" + integrity sha512-zJ6/hL0BG2Hs9g/1EHVncgAhDDCO86zntU16fRbUPyAIIEnWPb4ojmoQE8KL4VuO4jMRyLa/DyxOicwr8sdWyw== + dependencies: + defu "^2.0.4" + destr "^0.1.9" + flat "^5.0.0" + react-is@^16.12.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"