From 444344b8adfc1ec1d15b50d444919de5392d7f66 Mon Sep 17 00:00:00 2001 From: Espen Hovlandsdal Date: Sat, 20 Feb 2021 16:12:35 -0800 Subject: [PATCH] feat(cli): load `.env` files before running any command --- packages/@sanity/cli/package.json | 1 + packages/@sanity/cli/src/cli.js | 6 ++++++ packages/@sanity/cli/src/util/clientWrapper.js | 14 ++++++++------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/@sanity/cli/package.json b/packages/@sanity/cli/package.json index 4cbcc5ab0f7..25d8c71992a 100644 --- a/packages/@sanity/cli/package.json +++ b/packages/@sanity/cli/package.json @@ -48,6 +48,7 @@ "debug": "^3.1.0", "decompress": "^4.2.0", "deep-sort-object": "^1.0.1", + "dotenv": "^8.2.0", "es6-promisify": "^6.0.0", "eventsource": "^1.0.6", "execa": "^1.0.0", diff --git a/packages/@sanity/cli/src/cli.js b/packages/@sanity/cli/src/cli.js index 3ae0d5665d2..b604fb39df8 100755 --- a/packages/@sanity/cli/src/cli.js +++ b/packages/@sanity/cli/src/cli.js @@ -2,6 +2,7 @@ // eslint-disable-next-line import/no-unassigned-import import path from 'path' import chalk from 'chalk' +import dotenv from 'dotenv' import fse from 'fs-extra' import neatStack from 'neat-stack' import resolveFrom from 'resolve-from' @@ -24,6 +25,11 @@ module.exports = async function runCli(cliRoot) { const cwd = checkCwdPresence() const workDir = isInit ? process.cwd() : resolveRootDir(cwd) + // Try to load .env files from the sanity studio directory + // eslint-disable-next-line no-process-env + const env = process.env.SANITY_ACTIVE_ENV || process.env.NODE_ENV || 'development' + dotenv.config({path: path.join(workDir, `.env.${env}`)}) + await updateNotifier({pkg, cwd, workDir}).notify() const options = { diff --git a/packages/@sanity/cli/src/util/clientWrapper.js b/packages/@sanity/cli/src/util/clientWrapper.js index af0241c5020..7932fc2df3d 100644 --- a/packages/@sanity/cli/src/util/clientWrapper.js +++ b/packages/@sanity/cli/src/util/clientWrapper.js @@ -1,11 +1,6 @@ +import client from '@sanity/client' import generateHelpUrl from '@sanity/generate-help-url' import getUserConfig from './getUserConfig' -import client from '@sanity/client' - -/* eslint-disable no-process-env */ -const envAuthToken = process.env.SANITY_AUTH_TOKEN -const sanityEnv = process.env.SANITY_INTERNAL_ENV || 'production' -/* eslint-enable no-process-env */ const apiHosts = { staging: 'https://api.sanity.work', @@ -37,6 +32,13 @@ export default function clientWrapper(manifest, configPath) { requester.use(authErrors()) return function (opts = {}) { + // Read these environment variables "late" to allow `.env` files + + /* eslint-disable no-process-env */ + const envAuthToken = process.env.SANITY_AUTH_TOKEN + const sanityEnv = process.env.SANITY_INTERNAL_ENV || 'production' + /* eslint-enable no-process-env */ + const {requireUser, requireProject, api} = {...defaults, ...opts} const userConfig = getUserConfig() const token = envAuthToken || userConfig.get('authToken')