webpack loader test中的require.resolve是什么?

15

我正在学习如何在webpack上使用imports-loader。我已经通过教程构建了几个webpack演示项目。

这里是配置imports-loader的代码:

// ./webpack.config.js

module.exports = {
    ...
    module: {
        loaders: [
            {
                test: require.resolve("some-module"),
                loader: "imports?this=>window"
            }
        ]
};

我的问题:

  1. 通常,“test”应该是正则表达式。这里的require.resolve("some-module")是什么?它是什么意思?
2个回答

24

require.resolve("<moduleName>")会返回一个包含模块路径的字符串,例如这里

> require.resolve('angular')
/tmp/node_modules/angular/index.js

因此,在您的示例中,属性test将包含到模块some-module的路径字符串,默认情况下,webpack字符串转换为正则表达式,因此最终版本的loader配置将类似于以下内容:

{
  test: /^node_modules\/some-module\/index.js/,
  loader: 'imports?this=>window"
}

正如您所看到的,此加载程序仅适用于一个文件


使用require.resolve()的原因是什么,相比于像loaders这样的东西只传递一个字符串? - EJ Mason
2
@EJMason如果您只传递像“foo”这样的名称,您永远不会知道webpack将解析此名称的相对文件夹。例如,您有一个npm库,客户端应该通过webpack构建它并通过npm进行发布。当客户端构建您的库并使用您的webpack.config时,“pwd”将是客户端项目目录,因此“foo”将相对于此文件夹解析。这意味着有机会1. webpack根本找不到这样的加载器2)它解析客户端版本的这样的加载器。 - maksimr

0

webpack 的 require.resolve 返回模块 ID - webpack.js.org/api/module-methods/#require-resolve

在 webpack 中,模块 ID 是一个数字(与 NodeJS 中的字符串文件名相对应)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接