Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

filemanager-webpack-plugin

gregnb723.4kMIT8.0.0TypeScript support: included

Webpack plugin to copy, archive (.zip), move, delete files and directories before and after builds

webpack, webpack-copy-plugin, webpack-archive-plugin, filemanager-plugin

readme

FileManager Webpack Plugin

This Webpack plugin allows you to copy, archive (.zip/.tar/.tar.gz), move, delete files and directories before and after builds

Install

npm install filemanager-webpack-plugin --save-dev
# or
yarn add filemanager-webpack-plugin --dev

Usage

// webpack.config.js:

const FileManagerPlugin = require('filemanager-webpack-plugin');

export default {
  // ...rest of the config
  plugins: [
    new FileManagerPlugin({
      events: {
        onEnd: {
          copy: [
            { source: '/path/fromfile.txt', destination: '/path/tofile.txt' },
            { source: '/path/**/*.js', destination: '/path' },
          ],
          move: [
            { source: '/path/from', destination: '/path/to' },
            { source: '/path/fromfile.txt', destination: '/path/tofile.txt' },
          ],
          delete: ['/path/to/file.txt', '/path/to/directory/'],
          mkdir: ['/path/to/directory/', '/another/directory/'],
          archive: [
            { source: '/path/from', destination: '/path/to.zip' },
            { source: '/path/**/*.js', destination: '/path/to.zip' },
            { source: '/path/fromfile.txt', destination: '/path/to.zip' },
            { source: '/path/fromfile.txt', destination: '/path/to.zip', format: 'tar' },
            {
              source: '/path/fromfile.txt',
              destination: '/path/to.tar.gz',
              format: 'tar',
              options: {
                gzip: true,
                gzipOptions: {
                  level: 1,
                },
                globOptions: {
                  // https://github.com/Yqnn/node-readdir-glob#options
                  dot: true,
                },
              },
            },
          ],
        },
      },
    }),
  ],
};

Options

new FileManagerPlugin({
  events: {
    onStart: {},
    onEnd: {},
  },
  runTasksInSeries: false,
  runOnceInWatchMode: false,
});

File Events

  • onStart: Commands to execute before Webpack begins the bundling process

Note:

OnStart might execute twice for file changes in webpack context.

new webpack.WatchIgnorePlugin({
  paths: [/copied-directory/],
});
  • onEnd: Commands to execute after Webpack has finished the bundling process

File Actions

Copy

Copy individual files or entire directories from a source folder to a destination folder. Also supports glob pattern.

[
  { source: '/path/from', destination: '/path/to' },
  {
    source: '/path/**/*.js',
    destination: '/path',
    options: {
      flat: false,
      preserveTimestamps: true,
      overwrite: true,
    },
    globOptions: {
      dot: true,
    },
  },
  { source: '/path/fromfile.txt', destination: '/path/tofile.txt' },
  { source: '/path/**/*.{html,js}', destination: '/path/to' },
  { source: '/path/{file1,file2}.js', destination: '/path/to' },
];

Options

  • source[string] - a file or a directory or a glob
  • destination[string] - a file or a directory.
  • options [object] - copy options
  • globOptions [object] - options to forward to glob options(See available options here)

Caveats

  • if source is a glob, destination must be a directory
  • if source is a file and destination is a directory, the file will be copied into the directory

Delete

Delete individual files or entire directories. Also supports glob pattern

['/path/to/file.txt', '/path/to/directory/', '/another-path/to/directory/**.js'];

or

[
  {
    source: '/path/to/file.txt',
    options: {
      force: true,
    },
  },
];

Move

Move individual files or entire directories.

[
  { source: '/path/from', destination: '/path/to' },
  { source: '/path/fromfile.txt', destination: '/path/tofile.txt' },
];

Options

  • source[string] - a file or a directory or a glob
  • destination[string] - a file or a directory.

Mkdir

Create a directory path with given path

['/path/to/directory/', '/another/directory/'];

Archive

Archive individual files or entire directories. Defaults to .zip unless 'format' and 'options' provided. Uses node-archiver

[
  { source: '/path/from', destination: '/path/to.zip' },
  { source: '/path/**/*.js', destination: '/path/to.zip' },
  { source: '/path/fromfile.txt', destination: '/path/to.zip' },
  { source: '/path/fromfile.txt', destination: '/path/to.zip', format: 'tar' },
  {
    source: '/path/fromfile.txt',
    destination: '/path/to.tar.gz',
    format: 'tar', // optional
    options: {
      // see https://www.archiverjs.com/docs/archiver
      gzip: true,
      gzipOptions: {
        level: 1,
      },
      globOptions: {
        // https://github.com/Yqnn/node-readdir-glob#options
        dot: true,
      },
    },
  },
];
  • source[string] - a file or a directory or a glob
  • destination[string] - a file.
  • format[string] - Optional. Defaults to extension in destination filename.
  • options[object] - Refer https://www.archiverjs.com/archiver

Order of execution

If you need to preserve the order in which operations will run you can set the onStart and onEnd events to be Arrays. In this example below, in the onEnd event the copy action will run first, and then the delete after:

{
  onEnd: [
    {
      copy: [{ source: './dist/bundle.js', destination: './newfile.js' }],
    },
    {
      delete: ['./dist/bundle.js'],
    },
  ];
}

Other Options

  • runTasksInSeries [boolean] - Run tasks in series. Defaults to false
  • runOnceInWatchMode [boolean] - The onStart event will be run only once in watch mode. Defaults to false

For Example, the following will run one after the other

copy: [
  { source: 'dist/index.html', destination: 'dir1/' },
  { source: 'dir1/index.html', destination: 'dir2/' },
];
  • context [string] - The directory, an absolute path, for resolving files. Defaults to webpack context.

changelog

Changelog

All notable changes to this project will be documented in this file.

v8.0.0 (2022-11-16)

  • drop nodejs 12 support, requires node 14.13.1+ (0f334f0)
  • fix export syntax for typings (59b17ca)
  • update to rollup 3 (23e332c)

v7.0.0 (2022-06-11)

  • no notable changes since v7.0.0-beta.0

v7.0.0-beta.0 (2022-04-09)

  • no notable changes since v7.0.0-alpha.2

v7.0.0-alpha.2 (2022-02-01)

Bug Fixes

  • fix typings for copy actions (100686f)

Dependency Updates

  • bump all dependencies to latest (1dc902b)

Internal

v7.0.0-alpha.1 (2021-12-04)

Features

  • support flat copy with glob (83bf2dd)
  • add copy options overwrite and preserveTimestamps (83bf2dd)

v7.0.0-alpha.0 (2021-12-03)

Bug Fixes

  • remove cpy dependency, fixing vulnerabilities (9dcfbd8)

Breaking Changes

  • copy with glob by default maintains directory structure (9dcfbd8)

v6.1.7 (2021-09-10)

Bug Fixes

  • Revert npm engines requirement (a794942)

v6.1.6 (2021-08-21)

Bug Fixes

  • fix archiver creating invalid archives (9204617)

v6.1.5 (2021-08-14)

Features

v6.1.4 (2021-06-29)

Bug Fixes

  • add runOnceInWatchMode option to validation schema (6fe28f1)

v6.1.3 (2021-06-27)

Bug Fixes

v6.1.2 (2021-06-25)

Bug Fixes

  • remove node: protocol for CJS support (da97771)

v6.1.1 (2021-06-24)

Bug Fixes

  • fix incompatibility with CJS (e0f92a4)

v6.1.0 (2021-06-24)

Features

  • add option runOnceInWatchMode (50f4912)

v6.0.0 (2021-06-24)

Features

Breaking Changes

  • required node versions ^12.20.0 || ^14.13.1 || >=16.0.0 (ab86f31)

v5.0.0 (2021-05-10)

Dependency Updates

  • update to fs-extras v10 (3cebee5)

Breaking Changes

  • drop nodejs 10 support, requires node 12+

v4.0.0 (2021-03-07)

Breaking Changes

v3.1.1 (2021-03-07)

Bug Fixes

  • fix error while copying absolute glob source (fe20026)

v3.1.0 (2020-01-16)

Features

  • support options to forward to del (fe20026)

v3.0.0 (2020-12-26)

No notable changes since v3.0.0-beta.0

v3.0.0-beta.0 (2020-11-19)

Enhancements

  • add logs and handle errors (1fadb46)

v3.0.0-alpha.7 (2020-11-08)

Bug Fixes

  • preserve timestamps while copying (00de8e6), closes #48

v3.0.0-alpha.6 (2020-11-06)

Features

  • add option to specify context (fac605e)

v3.0.0-alpha.5 (2020-11-04)

Bug Fixes

  • Fix copy action execution in series (7837f41), closes #84

v3.0.0-alpha.4 (2020-10-27)

Bug Fixes

  • run all actions in the event (8dc5bab)
  • fix ignore behaviour in archiver action (30aa49a)

Features

  • add option to run tasks in series (034f645)

v3.0.0-alpha.3 (2020-10-26)

  • use native mkdir (13720b3)
  • fix onStart Event not executed in watch mode. (cb0c180)
  • execute all tasks in series (5fd2f16)
  • support execution order (cb0c180)

Breaking Changes

  • minimum required node version v10.13 (5884440)
  • file events moved into event object. See README (525f35d)

v3.0.0-alpha.2 (2020-10-22)

Features

  • support webpack 5

Enhancements

  • removed dependency mv and mkdir, use fs-extra instead
  • run tests in ubuntu, windows and mac
  • added more tests for all actions

Breaking Changes

  • requires node 10.13 or above
  • removed verbose option, will be added in upcoming releases

v3.0.0-alpha.1 (2020-10-04)

Enhancements

v3.0.0-alpha.0 (2020-10-04)

Enhancements

Breaking Changes