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() { ...@@ -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 * Does the supplied binary path exist
* *
* @param {String} binaryPath * @param {String} binaryPath
...@@ -286,6 +297,7 @@ module.exports.hasBinary = hasBinary; ...@@ -286,6 +297,7 @@ module.exports.hasBinary = hasBinary;
module.exports.getBinaryUrl = getBinaryUrl; module.exports.getBinaryUrl = getBinaryUrl;
module.exports.getBinaryName = getBinaryName; module.exports.getBinaryName = getBinaryName;
module.exports.getBinaryPath = getBinaryPath; module.exports.getBinaryPath = getBinaryPath;
module.exports.getCachePath = getCachePath;
module.exports.getVersionInfo = getVersionInfo; module.exports.getVersionInfo = getVersionInfo;
module.exports.getHumanEnvironment = getHumanEnvironment; module.exports.getHumanEnvironment = getHumanEnvironment;
module.exports.getInstalledBinaries = getInstalledBinaries; module.exports.getInstalledBinaries = getInstalledBinaries;
......
...@@ -119,34 +119,47 @@ function getProxy() { ...@@ -119,34 +119,47 @@ function getProxy() {
*/ */
function checkAndDownloadBinary() { 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; 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) { if (err) {
console.error(err); console.error(err);
return; return;
} }
download(sass.getBinaryUrl(), sass.getBinaryPath(), function(err) { download(sass.getBinaryUrl(), cacheBinary, function(err) {
if (err) { if (err) {
console.error(err); console.error(err);
return; 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() { ...@@ -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() { // 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