/// <summary> /// Download node packages as part of the deployment /// </summary> private void DownloadNodePackages(ILogger logger, DeploymentContext context) { // Check to see if there's a package.json file string packagePath = Path.Combine(context.OutputPath, PackageJsonFile); if (!File.Exists(packagePath)) { // If the package.json file doesn't exist then don't bother to run npm install return; } using (context.Profiler.Step("Downloading node packages")) { var npm = new NpmExecutable(context.OutputPath); if (!npm.IsAvailable) { logger.Log("NPM not installed or couldn't be located. Skipping package installation."); return; } // Set the npm proxy settings based on the default settings var proxy = WebRequest.DefaultWebProxy; var httpProxyUrl = proxy.GetProxy(new Uri("http://registry.npmjs.org/")); var httpsProxyUrl = proxy.GetProxy(new Uri("https://registry.npmjs.org/")); if (httpProxyUrl != null) { npm.EnvironmentVariables["HTTP_PROXY"] = httpProxyUrl.ToString(); } if (httpsProxyUrl != null) { npm.EnvironmentVariables["HTTPS_PROXY"] = httpsProxyUrl.ToString(); } // Use the temp path as the user profile path in case we don't have the right // permission set. This normally happens under IIS as a restricted user (ApplicationPoolIdentity). string npmUserProfile = Path.Combine(_tempPath, "npm"); npm.EnvironmentVariables["USERPROFILE"] = npmUserProfile; npm.EnvironmentVariables["LocalAppData"] = npmUserProfile; npm.EnvironmentVariables["AppData"] = npmUserProfile; try { // Use the http proxy since https is failing for some reason npm.Execute("config set registry \"http://registry.npmjs.org/\""); } catch(Exception ex) { // This fails if it's already set Debug.WriteLine(ex.Message); } // Run install on the output directory string log = npm.Execute(context.Profiler, "install").Item1; logger.Log(log); } }
/// <summary> /// Download node packages as part of the deployment /// </summary> private void DownloadNodePackages(ILogger logger, DeploymentContext context) { // Check to see if there's a package.json file string packagePath = Path.Combine(context.OutputPath, PackageJsonFile); if (!File.Exists(packagePath)) { // If the package.json file doesn't exist then don't bother to run npm install return; } using (context.Profiler.Step("Downloading node packages")) { var npm = new NpmExecutable(context.OutputPath); if (!npm.IsAvailable) { logger.Log(Resources.Log_NpmNotInstalled); return; } // Set the npm proxy settings based on the default settings var proxy = WebRequest.DefaultWebProxy; var httpUrl = new Uri("http://registry.npmjs.org/"); var httpsUrl = new Uri("https://registry.npmjs.org/"); var proxyHttpProxyUrl = proxy.GetProxy(httpUrl); var proxyHttpsProxyUrl = proxy.GetProxy(httpsUrl); if (proxyHttpProxyUrl != httpUrl) { npm.EnvironmentVariables["HTTP_PROXY"] = proxyHttpProxyUrl.ToString(); } if (proxyHttpsProxyUrl != httpsUrl) { npm.EnvironmentVariables["HTTPS_PROXY"] = proxyHttpsProxyUrl.ToString(); } try { // Use the http proxy since https is failing for some reason npm.Execute("config set registry \"http://registry.npmjs.org/\""); } catch (Exception ex) { // This fails if it's already set Debug.WriteLine(ex.Message); } // Run install on the output directory string log = npm.Execute(context.Profiler, "install").Item1; logger.Log(log); } }
/// <summary> /// Download node packages as part of the deployment. /// </summary> private void DownloadNodePackages(DeploymentContext context) { // Check to see if there's a package.json file string packagePath = Path.Combine(context.OutputPath, PackageJsonFile); if (!File.Exists(packagePath)) { // If the package.json file doesn't exist then don't bother to run npm install return; } ILogger innerLogger = context.Logger.Log(Resources.Log_RunningNPM); using (context.Tracer.Step("Downloading node packages")) { var npm = new NpmExecutable(context.OutputPath, _settings.GetCommandIdleTimeout()); if (!npm.IsAvailable) { context.Tracer.TraceError(Resources.Log_NpmNotInstalled); innerLogger.Log(Resources.Log_NpmNotInstalled, LogEntryType.Error); return; } // Set the npm proxy settings based on the default settings var proxy = WebRequest.DefaultWebProxy; var httpUrl = new Uri("http://registry.npmjs.org/"); var httpsUrl = new Uri("https://registry.npmjs.org/"); var proxyHttpProxyUrl = proxy.GetProxy(httpUrl); var proxyHttpsProxyUrl = proxy.GetProxy(httpsUrl); if (proxyHttpProxyUrl != httpUrl) { npm.EnvironmentVariables["HTTP_PROXY"] = proxyHttpProxyUrl.ToString(); } if (proxyHttpsProxyUrl != httpsUrl) { npm.EnvironmentVariables["HTTPS_PROXY"] = proxyHttpsProxyUrl.ToString(); } npm.SetHomePath(_homePath); // REVIEW: Do we still need this? try { // Use the http proxy since https is failing for some reason npm.Execute("config set registry \"http://registry.npmjs.org/\""); } catch (Exception ex) { // This fails if it's already set context.Tracer.TraceError(ex); } try { string log = null; using (var writer = new ProgressWriter()) { // Run install on the output directory log = npm.Install(context.Tracer, writer); } if (String.IsNullOrWhiteSpace(log)) { innerLogger.Log(Resources.Log_PackagesAlreadyInstalled); } else { innerLogger.Log(log); } } catch (Exception ex) { // Log the exception innerLogger.Log(ex); // re-throw throw; } } }
/// <summary> /// Download node packages as part of the deployment. /// </summary> private void DownloadNodePackages(DeploymentContext context) { // Check to see if there's a package.json file string packagePath = Path.Combine(context.OutputPath, PackageJsonFile); if (!File.Exists(packagePath)) { // If the package.json file doesn't exist then don't bother to run npm install return; } ILogger innerLogger = context.Logger.Log(Resources.Log_RunningNPM); using (context.Tracer.Step("Downloading node packages")) { var npm = new NpmExecutable(context.OutputPath); if (!npm.IsAvailable) { context.Tracer.TraceError(Resources.Log_NpmNotInstalled); innerLogger.Log(Resources.Log_NpmNotInstalled, LogEntryType.Error); return; } // Set the npm proxy settings based on the default settings var proxy = WebRequest.DefaultWebProxy; var httpUrl = new Uri("http://registry.npmjs.org/"); var httpsUrl = new Uri("https://registry.npmjs.org/"); var proxyHttpProxyUrl = proxy.GetProxy(httpUrl); var proxyHttpsProxyUrl = proxy.GetProxy(httpsUrl); if (proxyHttpProxyUrl != httpUrl) { npm.EnvironmentVariables["HTTP_PROXY"] = proxyHttpProxyUrl.ToString(); } if (proxyHttpsProxyUrl != httpsUrl) { npm.EnvironmentVariables["HTTPS_PROXY"] = proxyHttpsProxyUrl.ToString(); } npm.SetHomePath(_homePath); // REVIEW: Do we still need this? try { // Use the http proxy since https is failing for some reason npm.Execute("config set registry \"http://registry.npmjs.org/\""); } catch (Exception ex) { // This fails if it's already set context.Tracer.TraceError(ex); } try { string log = null; using (var writer = new ProgressWriter()) { writer.Start(); // Run install on the output directory log = npm.Install(context.Tracer, writer); } if (String.IsNullOrWhiteSpace(log)) { innerLogger.Log(Resources.Log_PackagesAlreadyInstalled); } else { innerLogger.Log(log); } } catch (Exception ex) { // Log the exception innerLogger.Log(ex); // re-throw throw; } } }