Loader就是负责资源文件从输入到输出的一个转换,实际上是一种管道的概念,对于同一个资源,可以依次使用多个Loader。通过多个Loader,完成一个功能。

    在自定义loader模块的时候,就是将输入的内容转换成一个标准的js语句,并输出到bundle.js中。可以直接将转换结果写成标准的js语句,也可以执行另外一个loader,通过另外的loader将结果再次转换成一个标准的js语句。如下代码,markdown-loader将源文件转换成了html语句,然后通过html-loader再次转换,最终将结果写入到bundle.js中。

    示例代码:

    1. // 自定义Loader模块
    2. const marked = require("marked");
    3. module.exports = (source) => {
    4. const html = marked(source);
    5. return `${html}`;
    6. // return `module.exports = ${JSON.stringify(html)}`;
    7. // return `export default ${JSON.stringify(html)}`;
    8. };
    1. // webpack.config.js 模块
    2. const path = require("path")
    3. module.exports = {
    4. mode: "none",
    5. entry: "./src/index.js",
    6. output: {
    7. path: path.join(__dirname, "dist"),
    8. filename: "bundle.js",
    9. publicPath: "dist/",
    10. },
    11. module: {
    12. rules: [{
    13. test: /\.md$/,
    14. use: ["html-loader", "./markdown-loader"],
    15. }, ],
    16. },
    17. };
    1. // bundle.js 返回结果
    2. var code = "<!-- @format -->\n\n<h3 id=\"自定义-loader\">自定义 Loader</h3>\n<p>自定义 markdown-loader。</p>\n";
    3. // Exports
    4. module.exports = code;