function onFile( error, data ) {
		var ropts;
		var dir;
		var i;
		if ( error ) {
			debug( 'Encountered an error when reading file: %s. Error: %s', file, error.message );
			return clbk( error );
		}
		debug( 'Successfully read file: %s.', file );

		debug( 'Analyzing file...' );
		data = analyze( data.toString(), options.builtins );

		debug( 'Caching list of package dependencies...' );
		cache[ file ] = data.packages;

		if ( options.walk === false ) {
			debug( 'Option to walk relative dependencies is `false`. Finished walking file: %s.', file );
			return clbk();
		}
		data = data.relative;
		if ( data.length === 0 ) {
			debug( 'No relative dependencies to walk. Finished walking file: %s.', file );
			return clbk();
		}
		total = data.length; // parent scope

		debug( 'Resolving relative module dependencies...' );
		dir = dirname( file );
		ropts = {
			'basedir': dir
		};
		for ( i = 0; i < total; i++ ) {
			resolve( data[ i ], ropts, onResolve );
		}
	}
Callback invoked after reading a file.

@private
@param {(Error|null)} error - error object
@param {(Buffer|string)} data - file contents
@returns {void}