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

Webpack - Critical dependency: the request of a dependency is an expression

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

Critical dependency: the request of a dependency is an expression

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


更多信息:

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

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

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

已解决 npm install request@2.79.0 --save

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

替换这个

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

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

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

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

我在 Angular 中无意中从 'protractor' 导入了 EventEmitter 时得到了这个。我怪我的 IDE 竟然提出了这个建议!

应该从核心导入:

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

我在使用 typeorm 和 nextjs 时遇到了同样的 warnnig。 我通过使用 here

中的代码将其静音
const FilterWarningsPlugin = require('webpack-filter-warnings-plugin');

module.exports = {
    ...
    plugins: [
        //ignore the drivers you don't want. This is the complete list of all drivers -- remove the suppressions for drivers you want to use.
        new FilterWarningsPlugin({
            exclude: [/mongodb/, /mssql/, /mysql/, /mysql2/, /oracledb/, /pg/, /pg-native/, /pg-query-stream/, /react-native-sqlite-storage/, /redis/, /sqlite3/, /sql.js/, /typeorm-aurora-data-api-driver/]
        })
    ]
};

我在上面的排除数组中添加了这样的正则表达式。

/Critical dependency/