Commit abce8c1a by Michael Mifsud Committed by GitHub

Merge pull request #1714 from nschonni/npm-download-cache

User configurable cache folder for binary download
parents 63d103fa b6558523
......@@ -259,6 +259,17 @@ function getBinaryPath() {
}
/**
* Looks for the configured cache path. If none is found, fall back to the NPM
* cache folder
*
* @api public
*/
function getCachePath() {
return process.env.npm_config_sass_binary_cache ||
process.env.npm_config_cache;
}
/**
* Does the supplied binary path exist
*
* @param {String} binaryPath
......@@ -286,6 +297,7 @@ module.exports.hasBinary = hasBinary;
module.exports.getBinaryUrl = getBinaryUrl;
module.exports.getBinaryName = getBinaryName;
module.exports.getBinaryPath = getBinaryPath;
module.exports.getCachePath = getCachePath;
module.exports.getVersionInfo = getVersionInfo;
module.exports.getHumanEnvironment = getHumanEnvironment;
module.exports.getInstalledBinaries = getInstalledBinaries;
......
......@@ -119,34 +119,47 @@ function getProxy() {
*/
function checkAndDownloadBinary() {
if (sass.hasBinary(sass.getBinaryPath())) {
if (process.env.SKIP_SASS_BINARY_DOWNLOAD_FOR_CI) {
console.log('Skipping downloading binaries on CI builds');
return;
}
var binaryPath = sass.getBinaryPath();
if (sass.hasBinary(binaryPath)) {
return;
}
mkdir(path.dirname(binaryPath), function(err) {
if (err) {
console.error(err);
return;
}
mkdir(path.dirname(sass.getBinaryPath()), function(err) {
var cachePath = path.join(sass.getCachePath(), pkg.name, pkg.version);
var cacheBinary = path.join(cachePath, sass.getBinaryName());
if (fs.existsSync(cacheBinary)) {
console.log('Found existing binary in ' + cacheBinary);
fs.createReadStream(cacheBinary).pipe(fs.createWriteStream(binaryPath));
} else {
// In case the cache path doesn't exist
mkdir(cachePath, function(err) {
if (err) {
console.error(err);
return;
}
download(sass.getBinaryUrl(), sass.getBinaryPath(), function(err) {
download(sass.getBinaryUrl(), cacheBinary, function(err) {
if (err) {
console.error(err);
return;
}
console.log('Binary downloaded and installed at', sass.getBinaryPath());
console.log('Binary downloaded to ' + cacheBinary);
fs.createReadStream(cacheBinary).pipe(fs.createWriteStream(binaryPath));
});
});
}
/**
* Skip if CI
*/
if (process.env.SKIP_SASS_BINARY_DOWNLOAD_FOR_CI) {
console.log('Skipping downloading binaries on CI builds');
return;
}
});
}
/**
......
......@@ -134,6 +134,29 @@ describe('runtime parameters', function() {
});
});
describe('Sass Binary Cache', function() {
var npmCacheDir;
before(function() {
npmCacheDir = process.env.npm_config_cache;
});
beforeEach(function() {
delete process.env.npm_config_sass_binary_cache;
});
it('npm config variable', function() {
var overridenCachePath = '/foo/bar/';
process.env.npm_config_sass_binary_cache = overridenCachePath;
var sass = require(extensionsPath);
assert.equal(sass.getCachePath(), overridenCachePath);
});
it('With no value, falls back to NPM cache', function() {
var sass = require(extensionsPath);
assert.equal(sass.getCachePath(), npmCacheDir);
});
});
});
// describe('library detection', function() {
......
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