Socket
Socket
Sign inDemoInstall

rimraf

Package Overview
Dependencies
0
Maintainers
1
Versions
77
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    rimraf

A deep deletion module for node (like `rm -rf`)


Version published
Weekly downloads
89M
increased by7.48%
Maintainers
1
Install size
145 kB
Created
Weekly downloads
 

Package description

What is rimraf?

The rimraf npm package is a Node.js module that provides a way to perform a deep deletion of files and directories, similar to the 'rm -rf' Unix command. It is designed to work on both Windows and Unix file systems, handling the intricacies of different environments. It is often used to clean up directories before rebuilding a project or to remove temporary files.

What are rimraf's main functionalities?

Asynchronous file and directory removal

This feature allows for the asynchronous removal of a directory and its contents. The provided code sample demonstrates how to use rimraf to delete a directory asynchronously. The callback function is used to handle any errors or to perform actions after the removal is complete.

const rimraf = require('rimraf');
rimraf('/path/to/directory', function (err) { 
  if (err) throw err; 
  console.log('Directory and its contents have been removed');
});

Synchronous file and directory removal

This feature allows for the synchronous removal of a directory and its contents. The provided code sample demonstrates how to use rimraf to delete a directory synchronously. The operation will block the event loop until the removal is complete.

const rimraf = require('rimraf');
rimraf.sync('/path/to/directory');
console.log('Directory and its contents have been removed synchronously');

Promisified file and directory removal

This feature allows for the removal of a directory and its contents using promises, which can be more convenient when working with modern asynchronous code patterns. The provided code sample demonstrates how to promisify the rimraf function and use it with then/catch for handling the resolution and rejection of the promise.

const rimraf = require('rimraf');
const { promisify } = require('util');
const rimrafPromise = promisify(rimraf);

rimrafPromise('/path/to/directory').then(() => {
  console.log('Directory and its contents have been removed');
}).catch((err) => {
  console.error('An error occurred:', err);
});

Other packages similar to rimraf

Readme

Source

The UNIX command rm -rf for node.

Install with npm install rimraf, or just drop rimraf.js somewhere.

Major Changes from v3 to v4

  • The function returns a Promise instead of taking a callback.
  • Built-in glob support removed.
  • Functions take arrays of paths, as well as a single path.
  • Native implementation used by default when available.
  • New implementation on Windows, falling back to "move then remove" strategy when exponential backoff for EBUSY fails to resolve the situation.
  • Simplified implementation on Posix, since the Windows affordances are not necessary there.

API

Hybrid module, load either with import or require().

// default export is the main rimraf function
import rimraf from 'rimraf'
// or
const rimraf = require('rimraf').default

// other strategies exported as well
import { rimraf, rimrafSync, native, nativeSync } from 'rimraf'
// or
const { rimraf, rimrafSync, native, nativeSync } = require('rimraf')

rimraf(f, [opts]) -> Promise

This first parameter is a path or array of paths. The second argument is an options object.

Options:

  • preserveRoot: If set to boolean false, then allow the recursive removal of the root directory. Otherwise, this is not allowed.
  • tmp: Windows only. Temp folder to use to place files and folders for the "move then remove" fallback. Must be on the same physical device as the path being deleted. Defaults to os.tmpdir() when that is on the same drive letter as the path being deleted, or ${drive}:\temp if present, or ${drive}:\ if not.
  • maxRetries: Windows and Native only. Maximum number of retry attempts in case of EBUSY, EMFILE, and ENFILE errors. Default 10 for Windows implementation, 0 for Native implementation.
  • backoff: Windows only. Rate of exponential backoff for async removal in case of EBUSY, EMFILE, and ENFILE errors. Should be a number greater than 1. Default 1.2
  • maxBackoff: Windows only. Maximum total backoff time in ms to attempt asynchronous retries in case of EBUSY, EMFILE, and ENFILE errors. Default 200. With the default 1.2 backoff rate, this results in 14 retries, with the final retry being delayed 33ms.
  • retryDelay: Native only. Time to wait between retries, using linear backoff. Default 100.

Any other options are provided to the native Node.js fs.rm implementation when that is used.

This will attempt to choose the best implementation, based on Node.js version and process.platform. To force a specific implementation, use one of the other functions provided.

rimraf.sync(f, [opts]) rimraf.rimrafSync(f, [opts])

Synchronous form of rimraf()

Note that, unlike many file system operations, the synchronous form will typically be significantly slower than the async form, because recursive deletion is extremely parallelizable.

rimraf.native(f, [opts])

Uses the built-in fs.rm implementation that Node.js provides. This is used by default on Node.js versions greater than or equal to 14.14.0.

rimraf.nativeSync(f, [opts]) rimraf.native.sync(f, [opts])

Synchronous form of rimraf.native

rimraf.manual(f, [opts])

Use the JavaScript implementation appropriate for your operating system.

rimraf.manualSync(f, [opts]) rimraf.manualSync(f, opts)

Synchronous form of rimraf.manual()

rimraf.windows(f, [opts])

JavaScript implementation of file removal appropriate for Windows platforms. Works around unlink and rmdir not being atomic operations, and EPERM when deleting files with certain permission modes.

First deletes all non-directory files within the tree, and then removes all directories, which should ideally be empty by that time. When an ENOTEMPTY is raised in the second pass, falls back to the rimraf.moveRemove strategy as needed.

rimraf.windows.sync(path, [opts]) rimraf.windowsSync(path, [opts])

Synchronous form of rimraf.windows()

rimraf.moveRemove(path, [opts])

Moves all files and folders to the parent directory of path with a temporary filename prior to attempting to remove them.

Note that, in cases where the operation fails, this may leave files lying around in the parent directory with names like .file-basename.txt.0.123412341. Until the Windows kernel provides a way to perform atomic unlink and rmdir operations, this is unfortunately unavoidable.

To move files to a different temporary directory other than the parent, provide opts.tmp. Note that this must be on the same physical device as the folder being deleted, or else the operation will fail.

This is the slowest strategy, but most reliable on Windows platforms. Used as a last-ditch fallback by rimraf.windows().

rimraf.moveRemove.sync(path, [opts]) rimraf.moveRemoveSync(path, [opts])

Synchronous form of rimraf.moveRemove()

Command Line Interface

Usage: rimraf <path> [<path> ...]
Deletes all files and folders at "path", recursively.

Options:
  --                  Treat all subsequent arguments as paths
  -h --help           Display this usage info
  --preserve-root     Do not remove '/' recursively (default)
  --no-preserve-root  Do not treat '/' specially

  --impl=<type>       Specify the implementationt to use.
                      rimraf: choose the best option
                      native: the C++ implementation in Node.js
                      manual: the platform-specific JS implementation
                      posix: the Posix JS implementation
                      windows: the Windows JS implementation
                      move-remove: a slower Windows JS fallback implementation

Implementation-specific options:
  --tmp=<path>        Folder to hold temp files for 'move-remove' implementation
  --max-retries=<n>   maxRetries for the 'native' and 'windows' implementations
  --retry-delay=<n>   retryDelay for the 'native' implementation, default 100
  --backoff=<n>       Exponential backoff factor for retries (default: 1.2)

mkdirp

If you need to create a directory recursively, check out mkdirp.

FAQs

Last updated on 13 Jan 2023

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc