From 989512f437a6a3913f23730eed013adc9e00a92c Mon Sep 17 00:00:00 2001 From: Wes Mason Date: Tue, 3 May 2016 21:29:28 +0100 Subject: [PATCH] Add ENABLE_NPM_FAILOVER option, set to true by default, with false disabling upstream failover. --- README.md | 6 ++++++ app.js | 17 +++++++++++++---- config.js | 3 ++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b2d9635..3c220a2 100644 --- a/README.md +++ b/README.md @@ -40,3 +40,9 @@ I believe all the above said tools will be available in a typical UNIX machine. # Configurations Please check config.js. All config values can be over-written by `environment-variables` + +# Using npm-offline-registry as a completely isolated registry + +If you set the ``ENABLE_NPM_FAILOVER`` config value to ``false`` then npm-offlin-registry will not attempt to +contact the upstream NPM registry for unknown packages and instead return a 404 response, meaning you can use +it as an alternative to the NPM registry behind a firewall / isolated from the internet. diff --git a/app.js b/app.js index df8b2d2..273325c 100644 --- a/app.js +++ b/app.js @@ -4,6 +4,7 @@ var utils = require( __dirname + '/./utils'); var NPM_PATH = config.NPM_PATH; var REGISTRY_NAME = config.REGISTRY_NAME; +var ENABLE_NPM_FAILOVER = config.ENABLE_NPM_FAILOVER; var fetchAndCacheMetadata = utils.fetchAndCacheMetadata; @@ -36,8 +37,12 @@ app.get( '/:package', function( req, res, next ){ return fileExists( cacheFile ) .tap( function( isExists ){ if( !isExists ){ - res._log.cacheHit = '---'; - return fetchAndCacheMetadata( packageName, cacheFile ); + if ( ENABLE_NPM_FAILOVER ) { + res._log.cacheHit = '---'; + return fetchAndCacheMetadata( packageName, cacheFile ); + } else { + return res.status( 404 ).json( {} ); + } } }) .then( function( ){ @@ -60,8 +65,12 @@ app.get( '/:package/-/:tarball', function( req, res, next ){ fileExists( packagePath ) .tap( function( isExists ){ if( !isExists ){ - res._log.cacheHit = '---'; - return fetchAndCacheTarball( packageName, version, packagePath ); + if ( ENABLE_NPM_FAILOVER ) { + res._log.cacheHit = '---'; + return fetchAndCacheTarball( packageName, version, packagePath ); + } else { + return res.status( 404 ).json( {} ); + } } }) .then( function(){ diff --git a/config.js b/config.js index 0c153cd..95c98ff 100644 --- a/config.js +++ b/config.js @@ -2,7 +2,8 @@ var defaultConfig = { NPM_PATH : process.env.HOME + '/.npm', REGISTRY_NAME : 'registry.npmjs.org', - PORT: 8234 + PORT: 8234, + ENABLE_NPM_FAILOVER: true }; var config = {};