如何避免在 Webpack 2 的配置中使用可选的解析选项?

How can I avoid using the optional resolve option in config for Webpack 2?

我正在玩新发布的第二版 Webpack。我收到以下错误消息。

Invalid configuration object... These properties are valid:
object { amd?, bail?, ..., devtool?, entry, ..., output?, performance?, plugins?, profile?, recordsInputPath?, recordsOutputPath?, recordsPath?, resolve?, ... }

我也遇到了以下错误。

configuration.resolve.extensions[0] should not be empty.

这令人困惑,因为在第一条消息中,问号暗示 resolve 是可选的(与另一个突出显示的选项 entry 这是必需的,如没有问号所示)。

我是不是不知道上下文中问号的含义?是打错了吗?我是不是被完全不同的东西弄糊涂了?

我将把这个放在回答之下,因为我认为我已经解决了你真正的问题:

新的 webpack 文档:https://webpack.js.org/

编辑:具体来说,https://webpack.js.org/configuration/resolve/

@thesublimeobject 的答案链接到正确的文档。我遇到了同样的问题,并按照他们的建议解决了。我想我会通过示例贡献一些我的 webpack 配置。

我必须添加以下 resolve 块:

resolve: {
    extensions: ['.js', '.jsx', '.json']
}

我还必须更新我的模块定义以捕获 .JSX 文件:

module: {
    rules: [{
        test: /\.jsx?$/,
        exclude: /node_modules/,
        loader: "babel-loader"
    }]
},

请注意,我已将可选的 'x' 添加到正则表达式文件扩展名匹配器。这给了我一个配置,允许我拥有以“.jsx”结尾的文件,但导入时没有识别扩展名。

import Widget from './components/Widget';

虽然不明确,但我觉得这提高了可读性。它还允许 SublimeText 始终对包含 JSX 的文件使用 Babel's JavaScript (Babel) code highlighting

为什么这样?

根据文档,解析器现在具有这些默认值:

resolve: {
    enforceExtension: false,
    extensions: ['.js', '.json']
}

这允许使用指定的扩展名或不使用扩展名导入文件。如果您提供新的 extensions 集合,它将覆盖默认值。因此,要保留默认值以及您的新要求,您需要明确包括所有默认值。