【发布时间】:2017-08-11 23:56:39
【问题描述】:
在准系统 webpack 项目中导入 request 时收到三个警告消息。在GitHub 上提供了一个重现该错误的最小示例(运行npm install 和npm start)。
Critical dependency: the request of a dependency is an expression
我怎样才能摆脱这个警告?
更多信息:
Webpack 尝试静态解析 require 调用以生成最小的捆绑包。当库在 require 调用中使用变量或表达式时(例如 require('' + 'nodent') 中的 these lines 或 ajv),Webpack 无法静态解析它们并导入整个包。
我的理由是这种动态导入在生产环境中是不可取的,并且代码最好保持无警告。这意味着我想要任何解决问题的解决方案。例如:
- 手动配置 webpack 以导入所需的库并防止出现警告。
- 将
hack.js文件添加到我的项目中,以某种方式覆盖 require 调用。 - 升级我的库。
ajv-5.0.1-beta.3具有使警告静音的修复程序。但是,如果我想使用它,我必须等到它发布,然后直到har-validator和request发布后续更新。如果有办法强制har-validator使用ajv的测试版,那将解决我的问题。 - 其他
【问题讨论】:
-
1. github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. 我不认为它会起作用 3. 你得等一会儿。
-
@esp:该 github 评论似乎是我正在寻找的内容,但它并没有消除警告。如果我将其更改为
new webpack.IgnorePlugin(/async/, /ajv/),则三分之二的警告消失了,但 webpackCannot find module "../async"。对使它起作用的适当魔法值有任何想法吗? -
github 代码示例的链接已损坏。请直接将代码放入问题中。
-
对于那些在您自己的代码中编写基于表达式的动态导入后看到此内容的人,您可以使用something like
import(/* webpackIgnore: true */ "http://example.com/cdn/file.js")绕过警告。这不是解决方案,而是解决方法。