From 3a0b836be376575b5227a0237e8b2334a9f9ab24 Mon Sep 17 00:00:00 2001
From: Maksym Dogadailo <m.dogadailo@gmail.com>
Date: Tue, 9 Jan 2018 18:30:25 +0100
Subject: [PATCH] added getProxy (#3320)

* added getProxy

getProxy checks proxy settings from process.env.https_proxy or Yarn (NPM) config (.npmrc)

* changed yarn for npm to get https-proxy

default value for https-proxy is null, not undefined like in yarn
---
 packages/create-react-app/createReactApp.js | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/packages/create-react-app/createReactApp.js b/packages/create-react-app/createReactApp.js
index 062c9f2f6..420dde1b1 100755
--- a/packages/create-react-app/createReactApp.js
+++ b/packages/create-react-app/createReactApp.js
@@ -639,6 +639,21 @@ function isSafeToCreateProjectIn(root, name) {
   return false;
 }
 
+function getProxy() {
+  if (process.env.https_proxy) {
+    return process.env.https_proxy;
+  } else {
+    try {
+      // Trying to read https-proxy from .npmrc
+      let httpsProxy = execSync('npm config get https-proxy')
+        .toString()
+        .trim();
+      return httpsProxy !== 'null' ? httpsProxy : undefined;
+    } catch (e) {
+      return;
+    }
+  }
+}
 function checkThatNpmCanReadCwd() {
   const cwd = process.cwd();
   let childOutput = null;
@@ -709,10 +724,11 @@ function checkIfOnline(useYarn) {
 
   return new Promise(resolve => {
     dns.lookup('registry.yarnpkg.com', err => {
-      if (err != null && process.env.https_proxy) {
+      let proxy;
+      if (err != null && (proxy = getProxy())) {
         // If a proxy is defined, we likely can't resolve external hostnames.
         // Try to resolve the proxy name as an indication of a connection.
-        dns.lookup(url.parse(process.env.https_proxy).hostname, proxyErr => {
+        dns.lookup(url.parse(proxy).hostname, proxyErr => {
           resolve(proxyErr == null);
         });
       } else {
-- 
GitLab