Webpack - 关键依赖:依赖的请求是表达式

时间:2017-03-20 15:50:06

标签: webpack request ajv

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

Critical dependency: the request of a dependency is an expression

我怎样摆脱这个警告?

更多信息:

Webpack尝试静态解析require次调用以创建最小的包。当库在require调用中使用变量或表达式时(例如require('' + 'nodent') ajv中的hack.js),Webpack无法静态解析它们并导入整个包。

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

  1. 手动配置webpack以导入所需的库并防止发生警告。
  2. ajv-5.0.1-beta.3文件添加到我的项目中,以某种方式覆盖require调用。
  3. 升级我的库。 har-validator有一个解决方案可以使警告无声。但是,如果我想使用它,我必须等到它被释放,然后直到requesthar-validator释放后续更新。如果有办法强制ajv使用{{1}}的测试版,则可以解决我的问题。
  4. 其他

4 个答案:

答案 0 :(得分:21)

解决npm install request@2.79.0 --save

根据ajv的作者的说法,问题可能会在几周内在request的最新版本中得到解决。

答案 1 :(得分:6)

替换此

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'), {} )

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

当我不小心从“量角器”导入 EventEmitter 时,我在 Angular 中得到了这个。我责怪我的 IDE 提出了它!

它应该从核心导入:

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