1.0.0 • Published 4 months ago

recursive-exec v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

recursive-exec

Run a command on each file in a folder and its subfolders (CLI tool designed for use in npm scripts)

License:MIT npm Build

recursive-exec is the Unix find -type f -exec command for use in your project's package.json file.

A) Setup

Install package for node:

$ npm install --save-dev recursive-exec

B) Usage

1. npm scripts

Run recursive-exec from the "scripts" section of your package.json file.

Parameters:

  • The first parameter is the source folder.
  • The second parameter is the command template string.

Example package.json scripts:

   "scripts": {
      "minimize-js": "recursive-exec build/web --ext=.js 'uglifyjs {{file}} --output dist/web/{{basename}}.min.js'"
   },

The command template supports 6 variables: | Template Variable | Description | Example (source: 'build/web') | | ------------------- | --------------------------------------------- | -------------------------------- | | {{file}} | Full path including filename. | 'build/web/lib/fetch-json.js' | | {{filename}} | Relative path including filename. | 'lib/fetch-json.js' | | {{basename}} | Relative path including filenamewithout file extension. | 'lib/fetch-json' | | {{path}} | Relative path without filename. | 'lib' | | {{name}} | Basename of file. | 'fetch-json' | | {{nameCamelCase}} | Basename of file converted to camel case. | 'fetchJson' |

2. Command-line npx

Example terminal command to minimize JavaScript files:

$ npm install --save-dev recursive-exec
$ npx recursive-exec build/web --ext=.js "uglifyjs {{file}} --output dist/web/{{basename}}.min.js"

You can also install recursive-exec globally (--global) and then run it anywhere directly from the terminal.

3. CLI flags

Command-line flags: | Flag | Description | Value | | ------------ | ---------------------------------------------------------- | ---------- | | --echo | Show dry run preview of each command without executig it. | N/A | | --exclude | Comma separated list of strings to match in paths to skip. | string | | --ext | Filter files by file extension, such as .js.Use a comma to specify multiple extensions. | string | | --note | Place to add a comment only for humans. | string | | --quiet | Suppress informational messages. | N/A |

Examples:

  • recursive-exec src/web --ext=.less 'lessc src/web/{{filename}} build/web/{{basename}}.css' Compiles all LESS files in the src/web folder into CSS files in the build/web folder.

  • recursive-exec src/web --ext=.less 'lessc {{file}} build/web/{{basename}}.css' Identical to the previous example since {{file}} includes the source folder (src/web) in the path.

  • recursive-exec build/web --ext=.css 'csso {{file}} --output dist/web/{{filename}}' Optimizes the CSS files in the build/web folder and save the new files to the dist/web folder.

  • recursive-exec build/web --ext=.js --quiet 'make-dir dist/web/{{path}}' Duplicates the folder structure from build/web over to dist/web (first run npm install --save-dev make-dir-cli).

  • recursive-exec build/web --ext=.js 'uglifyjs {{file}} --output dist/web/{{basename}}.min.js' Minimizes the JavaScript files in the build/web folder and saves the new files to the dist/web folder with the .min.js file extension.

  • recursive-exec src 'glob {{file}}' Lists out all source files.

  • recursive-exec build/web-app --ext=.js --exclude=modules 'rollup {{file}} --file dist/web-app/{{filename}} --name {{nameCamelCase}}' Uses rollup to bundle the JavaScript for each web page but skip over the modules folders.

Note: Single quotes in commands are normalized so they work cross-platform and avoid the errors often encountered on Microsoft Windows.

C) Application Code

Even though recursive-exec is primarily intended for build scripts, the package can be used programmatically in ESM and TypeScript projects.

Example:

import { recursiveExec } from 'recursive-exec';

const results = recursiveExec.find('src/web', 'ls -o {{file}}', { quite: true });
console.log('Number of files:', results.length);

See the TypeScript Declarations at the top of recursive-exec.ts for documentation.


CLI Build Tools for package.json

  • 🎋 add-dist-header:  Prepend a one-line banner comment (with license notice) to distribution files
  • 📄 copy-file-util:  Copy or rename a file with optional package version number
  • 📂 copy-folder-util:  Recursively copy files from one folder to another folder
  • 🪺 recursive-exec:  Run a command on each file in a folder and its subfolders
  • 🔍 replacer-util:  Find and replace strings or template outputs in text files
  • 🔢 rev-web-assets:  Revision web asset filenames with cache busting content hash fingerprints
  • 🚆 run-scripts-util:  Organize npm scripts into named groups of easy to manage commands
  • 🚦 w3c-html-validator:  Check the markup validity of HTML files using the W3C validator

Feel free to submit questions at: github.com/center-key/recursive-exec/issues

MIT License

1.0.0

4 months ago

0.1.1

8 months ago

0.1.0

9 months ago

0.0.4

9 months ago

0.0.3

9 months ago

0.0.2

9 months ago

0.0.1

9 months ago