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

Posted

技术标签:

【中文标题】如何避免在 Webpack 2 的配置中使用可选的解析选项?【英文标题】:How can I avoid using the optional resolve option in config for Webpack 2? 【发布时间】:2017-06-27 13:04:27 【问题描述】:

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

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

我也收到以下错误。

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

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

我不知道问号在这种情况下的含义吗?是错字吗?我是不是被完全不同的东西弄糊涂了?

【问题讨论】:

如果您向我们展示您的配置文件,这将更容易调试...我假设您在那里没有解决方案? @thesublimeobject 我发现我没有足够强调问题的类型。我不是在问如何解决它。我问的是错误说我不能有一个空的这样的元素而不是所述元素的可选性。在我看来,这是一种无关紧要的实现(可能完全是)。 嗯,这就是我问的原因:我仍然不确定您的配置是否有 empty 解析对象或 no 解析对象.在前一种情况下,我可以看到它合法地抛出了一个类型的错误,如果你有这个对象,它必须有 prop 扩展;虽然如果是后者,我会理解你的困惑。如果是后者,最好在 repo 上开一个 issue? @thesublimeobject 哦,我很抱歉。我错过了这种差异。我的错。我用 no resolvefilled resolve 进行了测试。我完全错过了现有但空选项的情况。好想法。所以我想我应该像你说的那样报告它。问题是我不完全确定如何,而且我谦虚到怀疑这不是一个错误,而是我的无能是它背后的原因,呵呵。 如果您有兴趣,我刚刚使用您刚才提到的所有三个变体运行了我的配置,并且没有收到任何错误...所以我没有给您的建议。哈哈。 【参考方案1】:

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

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

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

【讨论】:

你是说我在生日的四个小时里都在与愚蠢的 Webpack 版本 2 作斗争,同时还拿着 Webpack 1 的愚蠢文档?!我不能那么愚蠢!它甚至在页面顶部说 Webpack 1 已经过时,应该使用 Webpack 2。 哦,等等。我刚刚阅读了隐藏在我的小屏幕上的第二列。他们实际上声明应该遵循指向另一个文档页面的链接。有一个词我现在选择不说,但它们有四个字母长,与一只说 quack 的鸟押韵。 哈哈。很高兴我们弄清楚了……我没想到还有第二组文档,除非有一天发生意外,所以不要难过。【参考方案2】:

@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 始终使用 Babel's javascript (Babel) code highlighting 处理包含 JSX 的文件。

为什么会这样?

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

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

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

【讨论】:

以上是关于如何避免在 Webpack 2 的配置中使用可选的解析选项?的主要内容,如果未能解决你的问题,请参考以下文章

webpack入门系列2

webpack配置之代码优化

使用webpack构建本地服务器

如何在 NestjS 中使用可选的 url 参数

如何在 Django 中定义可选的查询参数?

如何在 Node.js server.listen() 中使用可选的主机名参数