如何避免在Webpack 2的config中使用可选的resolve选项?

时间:2017-02-09 13:32:42

标签: javascript node.js webpack webpack-2

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

  

无效的配置对象...这些属性有效:
  object {amd?,bail?,...,devtool?, entry ,...,output?,performance?,plugins?,profile?,recordsInputPath?,recordsOutputPath?,recordsPath?,解决?,...}

我也遇到了以下错误。

  

configuration.resolve.extensions [0]不应为空。

这很令人困惑,因为在第一条消息中,问号暗示 resolve 是可选的(与其他突出显示的选项条目相对应)是必需的,如缺少问号所示。)

在这种情况下,我是否不知道问号的含义?这是一个错字吗?我对完全不同的东西感到困惑吗?

2 个答案:

答案 0 :(得分:2)

我打算回答这个问题因为我认为我已经解决了你的真正问题:

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

编辑:具体而言,https://webpack.js.org/configuration/resolve/

答案 1 :(得分:1)

@ 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集合,它将覆盖默认值。因此,要保留默认值和新要求,您需要明确包含所有默认值。