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


81

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

Critical dependency: the request of a dependency is an expression

我如何摆脱这个警告?


更多信息:

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

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

  1. 手动配置webpack导入所需的库,并防止发生警告。
  2. hack.js文件添加到我的项目中,该文件以某种方式覆盖了require调用。
  3. 升级我的库。ajv-5.0.1-beta.3有一个使警告静音的修复程序。但是,如果要使用它,则必须等到它发布后再发布har-validatorrequest发布后续更新。如果有一种方法可以强制har-validator使用Beta版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"。关于使它起作用的适当魔术值有任何想法吗?
Jodiug

github代码示例的链接已断开。请直接将代码放入问题中。
CodeChimpy

Answers:


25

解决了 npm install request@2.79.0 --save

据的作者说ajv,这个问题很可能会在request几周后的最新版本中得到解决。


@maembe尝试npm remove request重新安装,然后在版本号之前package.json删除^。如果您离开^,则包可能在出现更新后npm update再次出现警告。
Jodiug

没为我工作。但是@DhirendraNk在下面的另一个答案中的建议是替换webpack.ContextReplacementPlugin对我有用。
威尔

9

取代这个

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

7
这确实有效。关于正则表达式更改为什么可以解决此问题的更深入的解释将是很好的。
atconway

这对我有用,看到警告很烦人,谢谢。
威尔

2
有谁知道在哪里可以找到此代码?我找不到要替换的代码。
Prem popatia,

2
之所以有效,是因为您要告诉System.Import函数在node_modules文件夹中的何处查找源代码。路径会根据您使用的Angular版本而变化。希望它已经由Angular团队更好地处理。
罗伯特·布里斯塔

1

该警告可以链接到软件包的注入(依赖项或devDependencies)。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.