wxml loader for webpack
Please note this wxml is a markup language for Wechat mini programs
yarn add -D wxml-loaderYou may also need to use file-loader to extract files.
{
test: /\.wxml$/,
include: /src/,
use: [
{
loader: 'file-loader',
options: {
useRelativePath: true,
name: '[name].[ext]',
},
},
{
loader: 'wxml-loader',
options: {
root: resolve('src'),
},
},
],
}root(String): Root path for requiring sourcespublicPath(String): Defaults to webpack output.publicPathtransformContent(content, resource)(Function): Transform content, should return a content stringtransformUrl(url, resource)(Function): Transform url, should return a urlminimize(Boolean): To minimize. Defaults tofalse- All html-minifier options are supported
Currently wxml-loader could not resolve dynamic path, i.e. <image src="./images/{{icon}}.png" />. Please use copy-webapck-plugin to copy those resource to dist directory manually. See #1 for detail (Chinese).
This loader is also compatible with Alipay mini programs. You just need to make sure using test: /\.axml$/ instead of test: /\.wxml$/ in webpack config.
If you're using wxapp-webpack-plugin and setting Targets.Alipay as webpack target, it will automatically set transformContent() and transformUrl() option by default, the transformContent() function will transform wx:attr attribute to a:attr, and the transformUrl() function will transform .wxml extension to .axml automatically. That means you could write mini programs once, and build both Wechat and Alipay mini programs.
webpack.config.babel.js
import WXAppWebpackPlugin, { Targets } from 'wxapp-webpack-plugin';
export default (env) => ({
// ...other
target: Targets[env.target || 'Wechat'],
module: {
rules: [
// ...other,
{
test: /\.wxml$/,
use: [
{
loader: 'file-loader',
options: {
name: `[name].${env.target === 'Alipay' ? 'axml' : 'wxml'}`,
},
},
'wxml-loader',
],
},
],
},
plugin: [
// ...other
new WXAppWebpackPlugin(),
],
});For a complete guild to use webpack to develop WeiXin App, please checkout my wxapp-boilerplate repo.
MIT