What is file-loader?
The file-loader npm package is used to process files such as images, fonts, and other binary assets within a webpack build process. It can copy files to the output directory and resolve import/require() on a file into a url.
What are file-loader's main functionalities?
Importing Images
Allows importing image files directly in JavaScript or TypeScript files. The file-loader processes the import and replaces it with the final path to the output file.
import img from './file.png';
Configuring Output Path and Filenames
Configures webpack to output files with a specific naming pattern and to a specific directory. It also allows setting a public path for the files when they are referenced in the browser.
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'file-loader',
options: {
name: '[path][name].[ext]',
outputPath: 'images/',
publicPath: 'assets/',
},
},
],
},
],
},
};
Handling Fonts
Enables the inclusion and processing of font files in various formats. The file-loader will handle these assets and output them to a specified directory.
module.exports = {
module: {
rules: [
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'fonts/',
},
},
],
},
],
},
};
Other packages similar to file-loader
url-loader
The url-loader works like the file-loader, but can return a Data URL if the file is smaller than a byte limit. This can reduce the number of HTTP requests for small files.
raw-loader
The raw-loader allows importing files as a string. This is useful for importing things like HTML or SVG directly into your JavaScript code, which is different from file-loader's typical binary asset handling.
copy-webpack-plugin
This plugin allows copying individual files or entire directories to the build directory. It is more flexible than file-loader for simply copying files without processing them through webpack's module system.
file loader for webpack
Usage
var url = require("file!./file.png");
If you want to have a custom extension on your file, I have some prepared:
require("file/js!./javascript.js");
require("file/html!./page.html");
require("file/txt!./flash.txt");
require("file/png!./image.png");
require("file/jpg!./image.jpg");
require("file/jpeg!./image.jpeg");
require("file/swf!./flash.swf");
Look at the source to write your own. Pre- and postfix is possible.
License
MIT (http://www.opensource.org/licenses/mit-license.php)