complex-loader
![npm version](https://img.shields.io/npm/v/complex-loader.svg)
Combine results from multiple loaders into one object.
{
test: /\.md$/,
exclude: /node_modules/,
use: {
loader : `complex-loader`,
options: {
attributes: [
`json-loader`,
`yaml-loader`,
{
loader : `front-matter-loader`,
options: {
onlyAttributes: true,
},
},
],
Component: [
{
loader : `markdown-feat-react-loader`,
options: {
config: require.resolve(`./react-markdown.config.js`),
importImages: true,
}
},
{
loader : `front-matter-loader`,
options: {
onlyBody: true,
},
},
]
},
}
}
Import all desired data about file by one import.
import readme from 'readme.md'
console.log(readme)
Motivation
There is another similar loader called combine-loader. But it allows you to specify loaders only in a string format. The reason for creating complex-loader
was the support of defining loaders using javascript objects. This means that you can use functions, arrays, objects, and any others javascript entities.
Distant resources
If you are importing a resource from the outside the directory where node_modules have placed, specify loaders absolute paths by using require.resolve
.
[
require.resolve(`json-loader`),
require.resolve(`yaml-loader`)
]
This is because, on the nested level, the paths to the loaders will be resolved relative to the directory in which your file is located.
Self-nesting
You can specify as nested loader the same complex-loader
.
{
test: /\.png/,
exclude: /node_modules/,
use: {
loader : `complex-loader`,
options: {
deeper: {
loader: `complex-loader`,
options: {
and: {
loader: `complex-loader`,
options: {
deeper: 'url-loader'
}
}
}
}
}
}
}
Author and license
Vladimir Kalmykov vladimirmorulus@gmail.com
Under MIT license, 2018
See also