@stdlib/fs-exists
v0.2.2
Published
Test whether a path exists on the filesystem.
Downloads
1,773,106
Readme
Exists
Test whether a path exists on the filesystem.
Installation
npm install @stdlib/fs-exists
Usage
var exists = require( '@stdlib/fs-exists' );
exists( path, clbk )
Asynchronously tests whether a path exists on the filesystem.
exists( __dirname, done );
function done( bool ) {
if ( bool ) {
console.log( '...path exists.' );
} else {
console.log( '...path does not exist.' );
}
}
The above callback signature matches the now deprecated fs.exists()
API. The function also accepts the more conventional error
-first style callback signature found in most asynchronous Node APIs.
exists( __dirname, done );
function done( error, bool ) {
if ( error ) {
console.error( error.message );
}
if ( bool ) {
console.log( '...path exists.' );
} else {
console.log( '...path does not exist.' );
}
}
exists.sync( path )
Synchronously tests whether a path exists on the filesystem.
var bool = exists.sync( __dirname );
// returns <boolean>
Notes
The following is considered an anti-pattern:
var path = require( 'path' ); var readFileSync = require( '@stdlib/fs-read-file' ).sync; var file = path.join( __dirname, 'foo.js' ); if ( exists.sync( __dirname ) ) { file = readFileSync( file ); }
Because time elapses between checking for existence and performing IO, at the time IO is performed, the path is no longer guaranteed to exist. In other words, a race condition exists between the process attempting to read and another process attempting to delete.
Instead, the following pattern is preferred, where
errors
are handled explicitly:var path = require( 'path' ); var readFileSync = require( '@stdlib/fs-read-file' ).sync; var file = path.join( __dirname, 'foo.js' ); try { file = readFileSync( file ); } catch ( error ) { console.log( 'unable to read file.' ); console.error( error ); }
Nevertheless, use cases exist where one desires to check existence without performing IO. For example,
var path = require( 'path' ); var writeFileSync = require( '@stdlib/fs-write-file' ).sync; var file = path.join( __dirname, 'foo.js' ); if ( exists.sync( file ) ) { console.log( 'Don\'t overwrite the file!' ); } else { writeFileSync( file, 'beep', { 'encoding': 'utf8' }); }
Examples
var exists = require( '@stdlib/fs-exists' );
/* Sync */
console.log( exists.sync( __dirname ) );
// => true
console.log( exists.sync( 'beepboop' ) );
// => false
/* Async */
exists( __dirname, done );
exists( 'beepboop', done );
function done( error, bool ) {
if ( error ) {
console.error( error.message );
} else {
console.log( bool );
}
}
See Also
@stdlib/fs-exists-cli
: CLI package for use as a command-line utility.@stdlib/fs-read-file
: read the entire contents of a file.@stdlib/fs-read-dir
: read the entire contents of a directory.
Notice
This package is part of stdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.
For more information on the project, filing bug reports and feature requests, and guidance on how to develop stdlib, see the main project repository.
Community
License
See LICENSE.
Copyright
Copyright © 2016-2024. The Stdlib Authors.