【问题标题】:Webpack - Critical dependency: the request of a dependency is an expressionWebpack - 关键依赖:依赖的请求是一个表达式
【发布时间】:2017-08-11 23:56:39
【问题描述】:

在准系统 webpack 项目中导入 request 时收到三个警告消息。在GitHub 上提供了一个重现该错误的最小示例(运行npm installnpm start)。

Critical dependency: the request of a dependency is an expression

我怎样才能摆脱这个警告?


更多信息:

Webpack 尝试静态解析 require 调用以生成最小的捆绑包。当库在 require 调用中使用变量或表达式时(例如 require('' + 'nodent') 中的 these linesajv),Webpack 无法静态解析它们并导入整个包。

我的理由是这种动态导入在生产环境中是不可取的,并且代码最好保持无警告。这意味着我想要任何解决问题的解决方案。例如:

  1. 手动配置 webpack 以导入所需的库并防止出现警告。
  2. hack.js 文件添加到我的项目中,以某种方式覆盖 require 调用。
  3. 升级我的库。 ajv-5.0.1-beta.3 具有使警告静音的修复程序。但是,如果我想使用它,我必须等到它发布,然后直到har-validatorrequest发布后续更新。如果有办法强制har-validator 使用ajv 的测试版,那将解决我的问题。
  4. 其他

【问题讨论】:

  • 1. github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. 我不认为它会起作用 3. 你得等一会儿。
  • @esp:该 github 评论似乎是我正在寻找的内容,但它并没有消除警告。如果我将其更改为new webpack.IgnorePlugin(/async/, /ajv/),则三分之二的警告消失了,但 webpack Cannot find module "../async"。对使它起作用的适当魔法值有任何想法吗?
  • github 代码示例的链接已损坏。请直接将代码放入问题中。
  • 对于那些在您自己的代码中编写基于表达式的动态导入后看到此内容的人,您可以使用something like import(/* webpackIgnore: true */ "http://example.com/cdn/file.js") 绕过警告。这不是解决方案,而是解决方法。

标签: webpack request ajv


【解决方案1】:

npm install request@2.79.0 --save解决

ajv 的作者称,该问题可能会在几周后在最新版本的request 中得到解决。

【讨论】:

  • @maembe 尝试npm remove request 并重新安装,然后在package.json 中删除版本号前的^。如果您离开^,包可能会在npm update 之后更新,并且警告会再次出现。
  • 对我不起作用。但是@DhirendraNk 在下面的另一个答案中的建议是替换 webpack.ContextReplacementPlugin 对我有用。
  • 对于那些跟随者 - 请求包现在已贬值。
【解决方案2】:

替换这个

new webpack.ContextReplacementPlugin(
        /angular(\\|\/)core(\\|\/)@angular/,
        helpers.root('./src'), // location of your src
        {} // a map of your routes
    ),

有了这个-

new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, root('./src'), {} )

【讨论】:

  • 这确实有效。最好能更深入地解释一下为什么正则表达式更改可以解决这个问题。
  • 这对我有用,看到警告很烦人,谢谢。
  • 有谁知道在哪里可以找到此代码?我找不到要替换的代码。
  • 这是有效的,因为您告诉System.Import 函数在node_modules 文件夹中的哪里可以找到源代码。路径会根据您使用的 Angular 版本而变化。 Angular 团队应该更好地处理它,希望它已经做到了。
【解决方案3】:

此警告可以链接到(依赖项或 devDependencies)中的包注入。

如果问题突然出现,请检查你的 package.json 中的最后修改。

如果您打算重新启动 npm install,请考虑删除 package-lock.json。

【讨论】:

    【解决方案4】:

    当我偶然从“量角器”导入 EventEmitter 时,我在 Angular 中得到了这个。我什至责怪我的 IDE 建议!

    应该从核心导入:

    import { EventEmitter } from '@angular/core';
    

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 2022-08-15
      • 2020-06-15
      • 1970-01-01
      • 2022-11-10
      • 2020-10-11
      • 2021-06-13
      • 2018-10-10
      • 2019-05-04
      相关资源
      最近更新 更多