在 Webpack 5 Loader Guide 之后未定义模块源

Module source is undefined following Webpack 5 Loader Guide

我正在尝试按照 Writing a Loader 使用 Webpack 5.2.0 的指南进行操作。在页面底部,我们被引导完成一个简单的 Jest 测试示例。 Jest 测试检查第一个模块对象 source 属性 是我们的加载器生成的源。我可以验证我的 Webpack 编译器步骤生成了一个 name 属性 为 ./example.txt 的模块。但是 source 属性 总是 'undefined'。尽管 stats.hasErrors() 返回 false。

我是 Webpack 加载程序开发的新手,我不确定我缺少什么。 module structure 描述表明这个 属性 如果成功的话应该包含我的模块源。

是否有其他人使用最近版本的 Webpack 成功完成了这个场景?

经过一段时间的谷歌搜索后,我 found 对于 webpack@5 你需要传递额外的选项才能在输出中包含 source 字段。

stats.toJson({
  source: true
});

只是为了给这个答案添加一些上下文,为了使 Webpack5 Writing a Loader, Testing Section 工作(因为它是 2020 年 10 月 31 日),请调整以下内容。根据上面 Lesha 的建议,test/loader.test.js 中的 output 行应该是

const output = stats.toJson({source: true}).modules[0].source;

这解决了缺少 source 属性的问题。 Jest 测试仍然会失败,除非您创建的 example.txt 末尾没有换行符。要么确保没有行尾,要么将 expect 子句更改为以下内容:

expect(output).toBe('export default "Hey Alice!\n"');