Browse Source
* fetch data from main registry if cache look up is failed * save fetched data to npm's cache, in same was as npm does the jobpull/1/head
5 changed files with 97 additions and 15 deletions
@ -0,0 +1,15 @@ |
|||
|
|||
var defaultConfig = { |
|||
NPM_PATH : process.env.HOME + '/.npm', |
|||
REGISTRY_NAME : 'registry.npmjs.org', |
|||
LOCAL_REGISTRY : 'localhost:8080', |
|||
}; |
|||
|
|||
var config = {}; |
|||
|
|||
Object.keys( defaultConfig ).forEach( function(v){ |
|||
config[v] = process.env[v] || defaultConfig[v]; |
|||
}); |
|||
|
|||
module.exports = config; |
|||
|
@ -0,0 +1,32 @@ |
|||
/* globals describe, it */ |
|||
|
|||
var utils = require( '../utils' ); |
|||
var assert = require('assert'); |
|||
var fs = require('fs'); |
|||
var path = require('path'); |
|||
|
|||
|
|||
var fetchAndCacheMetadata = utils.fetchAndCacheMetadata; |
|||
var fetchAndCacheTarball = utils.fetchAndCacheTarball; |
|||
|
|||
/* TODO: write test */ |
|||
// var patchData = utils.patchData;
|
|||
|
|||
|
|||
describe( 'Utility functions ', function(){ |
|||
|
|||
it.skip( 'should fetchAndCacheMetadata', function( ){ |
|||
var cacheFile = '/home/hari/.npm/registry.npmjs.org/lodash/.cache.json'; |
|||
fetchAndCacheMetadata( 'lodash', cacheFile ); |
|||
assert( fs.existsSync( cacheFile ) ); |
|||
}); |
|||
|
|||
it( 'should fetchAndCacheTarball', function(){ |
|||
var cacheFile = '/home/hari/.npm/lodash/4.2.1/package.tgz'; |
|||
var packageJsonFile = path.dirname( cacheFile ) + '/package/package.json'; |
|||
|
|||
fetchAndCacheTarball( 'lodash', '4.2.1', cacheFile ); |
|||
assert( fs.existsSync( cacheFile ) ); |
|||
assert( fs.existsSync( packageJsonFile ) ); |
|||
}); |
|||
}); |
@ -0,0 +1,30 @@ |
|||
var execSync = require('child_process').execSync; |
|||
var path = require('path'); |
|||
var config = require( __dirname + '/./config' ); |
|||
|
|||
var REGISTRY_NAME = config.REGISTRY_NAME; |
|||
var LOCAL_REGISTRY = config.LOCAL_REGISTRY; |
|||
|
|||
exports.patchData = function ( data ){ |
|||
Object.keys(data.versions).forEach( function( v ){ |
|||
var val = data.versions[v]; |
|||
val.dist.tarball = val.dist.tarball.replace( REGISTRY_NAME, LOCAL_REGISTRY ); |
|||
}); |
|||
}; |
|||
|
|||
exports.fetchAndCacheMetadata = function ( packageName, cacheFile ){ |
|||
var packageCacheDir = path.dirname( cacheFile ); |
|||
execSync( 'mkdir ' + packageCacheDir ); |
|||
execSync( 'wget http://' + REGISTRY_NAME + '/' + packageName + ' -O ' + cacheFile ); |
|||
}; |
|||
|
|||
exports.fetchAndCacheTarball = function ( packageName, version, tarballPath ){ |
|||
var tarballUrl = 'http://' + REGISTRY_NAME + '/' + packageName + '/-/' + packageName + '-' + version + '.tgz'; |
|||
var packageTarballDir = path.dirname( tarballPath ); |
|||
execSync( 'mkdir -p ' + packageTarballDir ); |
|||
execSync( 'wget ' + tarballUrl + ' -O ' + tarballPath ); |
|||
execSync( 'cd ' + packageTarballDir + ';tar -xzf package.tgz package/package.json' ); |
|||
}; |
|||
|
|||
|
|||
|
Loading…
Reference in new issue