read-modify-write

    1.0.5 • Public • Published

    read-modify-write

    NodeJS - Read File, Modify Content, Write to File

    Copy Files

    Table of content

    1. Introduction to read-modify-write
    2. Read File/Directory
    3. Write to File/Directory
    4. Filter files
    5. Modify Content
    6. Prepare for Production
    7. Run tests

    1. Introduction to read-modify-write

    This Node module provides an API to interact with the file system and perform recursive sequential IO operations (such as file reading/writing and file content modification). It executes all operations in a blocking and synchronous way. It is a very simple yet very flexible toolkit with size of less than 2KB and no dependencies. To use the library all we need is to import read-modify-write module into our code.

    const rmw = require('read-modify-write');

    2. Read File/Directory

    To read file content recursively in a chosen directory we simply need to pass the folder path as the first parameter to the already imported module:

    rmw('src/dummy');

    3. Write to File/Directory

    To copy files from one directory to another we need a path modifier function which is passed as a second parameter:

    const move = filePath => filePath.replace('src', 'dist');
    rmw('src/dummy', move);

    The path modifier function takes one parameter which is the location / path for each of the listed files. The code above copies all files in the 'src/dummy' folder to the 'dist/dummy'.

    4. Filter files

    To filter files with certain extension we need to supply a function that will be called on each files on the list, and only return the values that pass a specific test (in this case the file extension is present in the string):

    const move = filePath => filePath.replace('src', 'dist');
    const filterHtml = c => c.endsWith('.html');
    rmw('src/dummy', move, filterHtml);

    This function, in combination with the previous one can be used to add suffix for certain file types:

    const move = filePath => filePath.replace('.js', '.min.js');
    const filterJs = c => c.endsWith('.js');
    rmw('src/dummy', move, filterJs);

    5. Modify files

    Consider an html file in 'src' folder with the following content:

    <html lang="en"><head><meta charset="utf-8"><title></title></head></html>

    To update the file content and save it to a new location we need to pass a forth parameter which is an update function which accepts file content as an argument.

    const move = filePath => filePath.replace('src', 'dist');
    const filterHtml = c => c.endsWith('.html');
    const update = c => c.replace('<title></title>', '<title>Page title</title>');
    rmw('src/dummy', move, filterHtml, update);

    The code above will result in a new html file created in the 'dist/dummy' folder with the following content:

    <html lang="en"><head><meta charset="utf-8"><title></title></head></html>

    6. Prepare for production

    This toolkit can assist you automate painful or time-consuming tasks in your development workflow. For example when publishing to production it can help you by doing CSS preprocessing, JS transpiling, minification, and much more:

    const terser = require('terser');
    const cleanCss = require('clean-css');
    const uglify = c => terser.minify(c).then(({ code }) => code);
    const clean = c => new cleanCss().minify(c).styles;
    const move = filePath => filePath.replace('src', 'dist');
    const filterJs = c => c.endsWith('.js');
    const filterCss = c => c.endsWith('.css');
    rmw('src', move);s
    rmw('src/dummy', move, filterJs, uglify);
    rmw('src/dummy', move, filterCss, clean);

    7. Running tests

    Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can run the tests the following command:

    $ npm test

    Install

    npm i read-modify-write

    DownloadsWeekly Downloads

    0

    Version

    1.0.5

    License

    ISC

    Unpacked Size

    38.4 kB

    Total Files

    8

    Last publish

    Collaborators

    • avatar