panorama-layout-loader v1.0.1
panorama-layout-loader
Panorama XML layout files loader for webpack
Install
npm i panorama-layout-loader
# or
yarn add panorama-layout-loaderUsage
By default every local <Image src="image.png"></Image> and <include src="script.js"> is required (require('./image.png')). You may need to specify loaders for images in your configuration (recommended file-loader, url-loader or entry-loader).
You can specify which tag-attribute combination should be processed by this loader via the query parameter attrs. Pass an array or a space-separated list of <tag>:<attribute> combinations. (Default: ['include:src', 'Image:src']).
Attributes also can be specified without tag, like :<attribute>.
{
test: /\.(xml)$/,
use: {
loader: 'panorama-layout-loader',
options: {
attrs: [':data-src']
}
}
}To completely disable tag-attribute processing (for instance, if you're handling image loading on the client side) you can pass in attrs=false.
Examples
With this configuration:
{
module: {
rules: [
{ test: /\.jpg$/, use: [ "file-loader" ] },
{ test: /\.png$/, use: [ "url-loader?mimetype=image/png" ] }
]
},
output: {
publicPath: "http://cdn.example.com/[hash]/"
}
}<!-- file.html -->
<img src="image.png" data-src="image2x.png" >require("panorama-layout-loader!./file.html");
// => '<Image src="http://cdn.example.com/49eba9f/a992ca.png" data-src="image2x.png"></Image>'Check out html-loader for more examples
Interpolation
You can use interpolateRequire flag to use require in template, like so:
require("panorama-layout-loader?interpolateRequire!./file.html");<#list list as list>
<a href="${list.href!}" />${list.name}</a>
</#list>
<Image src="${require(`./images/gallery.png`)}"></Image>
<div>${require(`./components/gallery.html`)}</div>Unlike html-loader backtick is the only possible quotes type there.
Export into XML files
In most cases you need to export XML into their own .xml file. Unlike html-loader, there is no need to use extract-loader, because here it compiles dependencies at runtime. To save it to file you may want to use file-loader, like with html-loader.
If you want to use generated string in your JS file, you can chain it with raw-loader, instead of file-loader.