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