链式Webpack
本指南适用于要确保将Webpack加载器链到宿主应用程序的情况,因为您需要依靠它才能运行自己的应用扩展。 我们假设我们将为@quasar/app-webpack
发布这个应用扩展,因为它对@quasar/app-vite
没有意义(它根本不使用Webpack)。
TIP
为了创建应用扩展项目文件夹,请首先阅读开发指南>简介.
完整例子
要查看我们将构建的示例,请转到完整示例,它是此应用程序扩展的一个github存储库。
我们只需要/index.js脚本,因为我们可以使用索引API从宿主应用程序配置quasar.config.js来包含我们的Webpack链。
.
├── package.json
└── src
└── index.js # 在索引API中描述
/index.js看起来像这样:
// 文件: /index.js
module.exports = function (api) {
// (可选!)
// Quasar 兼容性检查; 您可能需要硬性依赖性,
// 例如最低版本的“quasar”软件包
// 或最低版本的Quasar App CLI
api.compatibleWith('quasar', '^2.0.0')
api.compatibleWith('@quasar/app-webpack', '^3.0.0')
// 链式webpack
api.chainWebpack((chain) => chainWebpack(api.ctx, chain))
}
上面相同的文件中的“chainWebpack”方法:
// 文件: /index.js
const MarkdownIt = require('markdown-it')
const md = new MarkdownIt()
const chainWebpack = function (ctx, chain) {
const rule = chain.module.rule('md')
.test(/\.md$/)
.pre()
rule.use('v-loader')
.loader('vue-loader')
.options({
productionMode: ctx.prod,
transformAssetUrls: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href'
}
})
rule.use('ware-loader')
.loader('ware-loader')
.options({
raw: true,
middleware: function (source) {
// 使用markdown-it将markdown文件呈现为html,
// 然后使用Vue模板语法将该文件的输出括起来,
// 以便可以由“vue-loader”处理
return `<template><div>${md.render(source)}</div></template>`
}
})
}