resolve.extensions在Webpack中做了什么?

时间:2016-11-12 17:03:22

标签: webpack

以下是关于resolve.extensions的official document

resolve.extensions

应该用于解析模块的扩展数组。例如,为了发现CoffeeScript文件,您的数组应包含字符串“.coffee”。

默认值:[“”,“。webpack.js”,“。web.js”,“。js”]

重要提示:设置此选项将覆盖默认值,这意味着webpack将不再尝试使用默认扩展名解析模块。如果您希望正确解析其扩展所需的模块(例如require('./ somefile.ext')),则必须在数组中包含空字符串。同样,如果您希望将没有扩展名所需的模块(例如require('下划线'))解析为扩展名为“.js”的文件,则必须在数组中包含“.js”。

我对此完全感到困惑。

“如果您希望正确解析其扩展所需的模块(例如require('./ somefile.ext')),则必须在数组中包含空字符串。”

为什么?

“同样,如果您希望将没有扩展名所需的模块(例如require('下划线'))解析为扩展名为”.js“的文件,则必须在数组中包含”.js“。” p>

为什么呢?如果我在数组中包含“.js”和“.css”,该怎么办?

我不清楚resolve.extension的行为。请举例说明。

1 个答案:

答案 0 :(得分:8)

Webpack使用resolve.extensions生成模块的所有可能路径,例如

function getPaths(module) {
    return ['', '.js', '.css'].map(ext => module + ext);
}

getPaths('./somefile'); // ['./somefile', './somefile.js', './somefile.css']

getPaths('./somefile.js'); // ['./somefile.js', './somefile.js.js', './somefile.js.css']
然后,Webpack将继续查找每个路径,直到找到文件为止。