【发布时间】:2023-02-11 01:37:48
【问题描述】:
我正在使用 revealjs 创建响应式演示文稿。 revealjs 的问题是所有幻灯片代码都写在一个 HTML 文件中,这在某种程度上可能很混乱(某些演示文稿的 HTML 代码在该单个文件中达到了大约 3500 行 HTML)。
我现在正在重组这个系统,我想要一个名为 slides 的目录,其中包含每个幻灯片 HTML 文件。这些文件中的每一个都被命名为 slidenumber.html。最后,我想将所有带有 webpack 5 的文件打包到 dist 中的单个 HTML 文件中。我设法实现了这一点,但开发服务器存在问题。
webpack.config.js
// ... imports ....
module.exports = {
...,
plugins: [
....,
new HtmlWebpackPlugin({
filename: "index.html",
inject: true,
templateContent: getTemplate(),
}),
new WatchExternalFilesPlugin({
files: ["./slides/*.html"],
}),
],
module: {
rules: [...],
},
devServer: {
port: 8080,
},
};
getTemplate 函数循环遍历 slides 目录中的 HTML 文件,并返回用模板样板包装的文件
这是参考功能
getTemplate.js
const fs = require("fs/promises");
const path = require("path");
const { parse } = require("node-html-parser");
module.exports = async () => {
const template = parse(
await fs.readFile(path.join(__dirname, "../templates/index.html"))
);
const files = await fs.readdir(path.join(__dirname, "../slides"));
for await (const fileName of files) {
const slide = parse(
await fs.readFile(path.join(__dirname, `../slides/${fileName}`))
);
template.querySelector("#slides").appendChild(slide);
}
return template.toString();
};
以上所有代码在构建时都运行良好,但是在运行开发服务器时,我无法让 HtmlWebpackPlugin 在幻灯片目录中更改任何 HTML 幻灯片文件时重新执行 templateContent: getTemplate(),结果,当我在幻灯片目录中编辑幻灯片 HTML 文件的任何文件,我没有得到任何更新。
我知道 templateContent 应该只在服务器启动时运行,但我想知道是否有任何其他功能可以让我达到所需的行为。
谢谢你来到这里,请原谅我的英语,我不是母语人士。
【问题讨论】:
标签: javascript webpack babeljs webpack-dev-server bundling-and-minification