什么是require.resolve在webpack loader测试中

Nic*_*.Xu 8 webpack

我在webpack上学习这个import-loader.我已经按照教程构建了几个webpack演示项目.

以下是配置imports-loader的代码:

// ./webpack.config.js

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

我的问题:

  1. 通常,"测试"应该是正则表达式.这是什么require.resolve("some-module")?这是什么意思?

mak*_*imr 16

require.resolve("<moduleName>") 返回其包含到模块路径字符串,例如

> require.resolve('angular')
/tmp/node_modules/angular/index.js
Run Code Online (Sandbox Code Playgroud)

所以在你的示例属性test中将包含带有模块路径的字符串some-module,默认情况下webpack 字符串转换为正则表达式,因此最终版本的loader config将是这样的:

{
  test: /^node_modules\/some-module\/index.js/,
  loader: 'imports?this=>window"
}
Run Code Online (Sandbox Code Playgroud)

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

  • @EJMason 如果你只传递一个像“foo”这样的名称,你永远不知道相对于哪个文件夹 web pack 会解析这个名称。例如,您有一个 npm 库,应由客户端应用程序通过 web pack 构建并通过 npm 传送它。当客户端构建您的库并使用您的 webpack.config 时,`pwd` 将是客户端项目目录,因此“foo”将相对于该文件夹进行解析。这意味着有可能 1. webpack 找不到这样的加载器 2) 它解析了这样的加载器的客户端版本 (2认同)