Commit 0e3d809f by Adeel Mujahid

Merge pull request #663 from rubennorte/improve-install-script

Improve install script
parents 39b14d76 250d6cf9
...@@ -2,7 +2,9 @@ var fs = require('fs'), ...@@ -2,7 +2,9 @@ var fs = require('fs'),
path = require('path'), path = require('path'),
request = require('request'), request = require('request'),
mkdirp = require('mkdirp'), mkdirp = require('mkdirp'),
exec = require('shelljs').exec; exec = require('shelljs').exec,
npmconf = require('npmconf'),
packageInfo = require('../package.json');
require('../lib/extensions'); require('../lib/extensions');
...@@ -16,27 +18,17 @@ require('../lib/extensions'); ...@@ -16,27 +18,17 @@ require('../lib/extensions');
*/ */
function download(url, dest, cb) { function download(url, dest, cb) {
var file = fs.createWriteStream(dest);
applyProxy({ rejectUnauthorized: false }, function(options) { applyProxy({ rejectUnauthorized: false }, function(options) {
var returnError = function(err) { var returnError = function(err) {
fs.unlink(dest);
cb(typeof err.message === 'string' ? err.message : err); cb(typeof err.message === 'string' ? err.message : err);
}; };
var req = request.get(url, options).on('response', function(response) { request.get(url, options).on('response', function(response) {
if (response.statusCode < 200 || response.statusCode >= 300) { if (response.statusCode < 200 || response.statusCode >= 300) {
returnError('Can not download file from ' + url); returnError('Can not download file from ' + url);
return; return;
} }
response.pipe(file); response.pipe(fs.createWriteStream(dest));
file.on('finish', function() {
file.close(cb);
});
}).on('error', returnError); }).on('error', returnError);
req.end();
req.on('error', returnError);
}); });
} }
...@@ -49,25 +41,26 @@ function download(url, dest, cb) { ...@@ -49,25 +41,26 @@ function download(url, dest, cb) {
*/ */
function applyProxy(options, cb) { function applyProxy(options, cb) {
require('npmconf').load({}, function (er, conf) { npmconf.load({}, function (er, conf) {
var getProxyFromEnv = true; var proxyUrl;
['https-proxy', 'proxy', 'http-proxy'].forEach(function(setting) {
var proxyUrl = conf.get(setting); if (!er) {
['https-proxy', 'proxy', 'http-proxy'].some(function(setting) {
if(proxyUrl && proxyUrl === require('url').parse(proxyUrl)) { var npmProxyUrl = conf.get(setting);
options.proxy = proxyUrl; if (npmProxyUrl) {
getProxyFromEnv = false; proxyUrl = npmProxyUrl;
cb(options); return true;
return; }
} });
}); }
if(getProxyFromEnv) { if (!proxyUrl) {
var env = process.env; var env = process.env;
options.proxy = env.HTTPS_PROXY || env.https_proxy || env.HTTP_PROXY || env.http_proxy; proxyUrl = env.HTTPS_PROXY || env.https_proxy || env.HTTP_PROXY || env.http_proxy;
cb(options);
} }
options.proxy = proxyUrl;
cb(options);
}); });
} }
...@@ -77,7 +70,7 @@ function applyProxy(options, cb) { ...@@ -77,7 +70,7 @@ function applyProxy(options, cb) {
* @api private * @api private
*/ */
function exists() { function checkAndFetchBinaries() {
fs.exists(path.join(__dirname, '..', 'vendor', process.sassBinaryName), function (exists) { fs.exists(path.join(__dirname, '..', 'vendor', process.sassBinaryName), function (exists) {
if (exists) { if (exists) {
return; return;
...@@ -96,7 +89,7 @@ function exists() { ...@@ -96,7 +89,7 @@ function exists() {
function fetch() { function fetch() {
var url = [ var url = [
'https://raw.githubusercontent.com/sass/node-sass-binaries/v', 'https://raw.githubusercontent.com/sass/node-sass-binaries/v',
require('../package.json').version, '/', process.sassBinaryName, packageInfo.version, '/', process.sassBinaryName,
'/binding.node' '/binding.node'
].join(''); ].join('');
var dir = path.join(__dirname, '..', 'vendor', process.sassBinaryName); var dir = path.join(__dirname, '..', 'vendor', process.sassBinaryName);
...@@ -132,4 +125,4 @@ if (process.env.SKIP_SASS_BINARY_DOWNLOAD_FOR_CI) { ...@@ -132,4 +125,4 @@ if (process.env.SKIP_SASS_BINARY_DOWNLOAD_FOR_CI) {
* Run * Run
*/ */
exists(); checkAndFetchBinaries();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment