What is filemanager-webpack-plugin?
filemanager-webpack-plugin is a Webpack plugin that allows you to manage files and directories before and after the Webpack build process. It provides functionalities such as copying, moving, deleting, and archiving files and directories.
What are filemanager-webpack-plugin's main functionalities?
Copy Files
This feature allows you to copy files from one location to another. In this example, 'file.txt' is copied from the 'src' directory to the 'dist' directory after the Webpack build process ends.
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
plugins: [
new FileManagerPlugin({
events: {
onEnd: {
copy: [
{ source: './src/file.txt', destination: './dist/file.txt' }
]
}
}
})
]
};
Move Files
This feature allows you to move files from one location to another. In this example, 'file.txt' is moved from the 'src' directory to the 'dist' directory after the Webpack build process ends.
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
plugins: [
new FileManagerPlugin({
events: {
onEnd: {
move: [
{ source: './src/file.txt', destination: './dist/file.txt' }
]
}
}
})
]
};
Delete Files
This feature allows you to delete files. In this example, 'file.txt' is deleted from the 'dist' directory after the Webpack build process ends.
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
plugins: [
new FileManagerPlugin({
events: {
onEnd: {
delete: [
'./dist/file.txt'
]
}
}
})
]
};
Archive Files
This feature allows you to archive files into a zip file. In this example, the contents of the 'dist' directory are archived into 'archive.zip' after the Webpack build process ends.
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
plugins: [
new FileManagerPlugin({
events: {
onEnd: {
archive: [
{ source: './dist', destination: './dist/archive.zip' }
]
}
}
})
]
};
Other packages similar to filemanager-webpack-plugin
copy-webpack-plugin
copy-webpack-plugin is a Webpack plugin that copies individual files or entire directories to the build directory. It is similar to the copy functionality of filemanager-webpack-plugin but does not provide other functionalities like moving, deleting, or archiving files.
clean-webpack-plugin
clean-webpack-plugin is a Webpack plugin that removes/cleans your build folder(s) before building. It is similar to the delete functionality of filemanager-webpack-plugin but does not provide other functionalities like copying, moving, or archiving files.
webpack-shell-plugin-next
webpack-shell-plugin-next is a Webpack plugin that allows you to run shell commands before or after the Webpack build process. It can be used to achieve similar functionalities as filemanager-webpack-plugin by running shell commands for copying, moving, deleting, or archiving files, but it requires more manual setup.
Webpack File Manager 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
Usage
Webpack.config.js:
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
...
...
plugins: [
new FileManagerPlugin({
onEnd: {
copy: [
{ source: '/path/from', destination: '/path/to' },
{ source: '/path/**/*.js', destination: '/path' },
{ source: '/path/fromfile.txt', destination: '/path/tofile.txt' },
{ source: '/path/**/*.{html,js}', destination: '/path/to' },
{ source: '/path/{file1,file2}.js', destination: '/path/to' },
{ source: '/path/file-[hash].js', destination: '/path/to' }
],
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: {
nomount: true
}
}
}
]
}
})
],
...
}
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:
const FileManagerPlugin = require('filemanager-webpack-plugin');
module.exports = {
...
...
plugins: [
new FileManagerPlugin({
onEnd: [
{
copy: [
{ source: "./dist/bundle.js", destination: "./newfile.js" }
]
},
{
delete: [
"./dist/bundle.js"
]
}
]
})
],
...
}
Options
new FileManagerPlugin(fileEvents, options);
File Events
onStart
: Commands to execute before Webpack begins the bundling processonEnd
: Commands to execute after Webpack has finished the bundling process
File Actions
Name | Description | Example |
---|
copy | Copy individual files or entire directories from a source folder to a destination folder. Also supports glob pattern | copy: [ { source: 'dist/bundle.js', destination: '/home/web/js/' } ] |
delete | Delete individual files or entire directories. | delete: [ 'file.txt', '/path/to' ] |
move | Move individual files or entire directories. | move: [ { source: 'dist/bundle.js', destination: '/home/web/js/' } ] |
mkdir | Create a directory path. Think mkdir -p | mkdir: [ '/path/to/directory/', '/another/path/' ] |
archive | Archive individual files or entire directories. Defaults to .zip unless 'format' and 'options' provided. Uses node-archiver | archive: [ { source: 'dist/bundle.js', destination: '/home/web/archive.zip' format: 'tar' or 'zip' options: { options passed to archiver } } ] |