在Webpack配置规则中使用require.resolve的目的是什么?

平方尺

所以我正在检查由create-react-app生成的webpack配置文件,当我发现指定要使用的加载程序时,它使用require.resolve()

在此处输入图片说明

在我总是像这样直接输入装入程序名称之前: 在此处输入图片说明

根据文档,require.resolve()获取id并将其编译到模块的路径。但是,我仍然不确定这两种方法之间到底有什么区别,因为它们都能起作用。是因为CRP将配置文件包装在一个文件夹中,所以需要解析模块的路径?还是还有其他原因?

阿列克谢·普罗霍罗夫(Alexey Prokhorov)

从v1.0.0开始在CRP中使用此方法。例如,参见PR在使用子项目构建项目之前,我不认为您应该关心它。

当您有一个复杂的项目时,这确实有意义。如果使用字符串名称指定加载程序,则将解析与根项目相关的加载程序。但是,当您使用require.resolve指定它时,它将与配置有关,而不与根应用程序有关。

root
├─┬ project1
│ ├─┬ node_modules
│ │ ╰── awesome-typescript-loader
│ ╰── webpack.config.js
├─┬ project2
│ ├── node_modules
│ ╰── webpack.config.js
├── node_modules
╰── webpack.config.js

root / webpack.config.js:

module.exports = [
  require('./project1/webpack.config.js'),
  require('./project2/webpack.config.js'),
];

在上面的示例中,仅为project1安装了awesome-typescript-loader。因此,让我们webpack从根项目开始运行

root / project1 / webpack.config.js:

// It throws "Can't resolve 'awesome-typescript-loader'" error
loader: 'awesome-typescript-loader',
// It works
loader: require.resolve('awesome-typescript-loader')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章