Loader就是负责资源文件从输入到输出的一个转换,实际上是一种管道的概念,对于同一个资源,可以依次使用多个Loader。通过多个Loader,完成一个功能。
在自定义loader模块的时候,就是将输入的内容转换成一个标准的js语句,并输出到bundle.js中。可以直接将转换结果写成标准的js语句,也可以执行另外一个loader,通过另外的loader将结果再次转换成一个标准的js语句。如下代码,markdown-loader将源文件转换成了html语句,然后通过html-loader再次转换,最终将结果写入到bundle.js中。
示例代码:
// 自定义Loader模块const marked = require("marked");module.exports = (source) => {const html = marked(source);return `${html}`;// return `module.exports = ${JSON.stringify(html)}`;// return `export default ${JSON.stringify(html)}`;};
// webpack.config.js 模块const path = require("path")module.exports = {mode: "none",entry: "./src/index.js",output: {path: path.join(__dirname, "dist"),filename: "bundle.js",publicPath: "dist/",},module: {rules: [{test: /\.md$/,use: ["html-loader", "./markdown-loader"],}, ],},};
// bundle.js 返回结果var code = "<!-- @format -->\n\n<h3 id=\"自定义-loader\">自定义 Loader</h3>\n<p>自定义 markdown-loader。</p>\n";// Exportsmodule.exports = code;
