为什么webpack需要一个加载程序来进行我不知道的导入';我没用?

为什么webpack需要一个加载程序来进行我不知道的导入';我没用?,webpack,dynamic-import,Webpack,Dynamic Import,假设我的index.js中有这个 import { foo } from "./extra.js"; 然后在我的extra.js中有一个 export function foo () { return 0; } export function bar () { import("./baz.svg"); } 当我尝试构建时,我得到一个关于baz.svg的错误:“您可能需要一个合适的加载程序来处理此文件类型”。 很明显,我从来没有在我的代码中使用过bar,

假设我的
index.js中有这个

import { foo } from "./extra.js";
然后在我的
extra.js中有一个

export function foo () { return 0; }
export function bar () { import("./baz.svg"); }
当我尝试构建时,我得到一个关于
baz.svg
的错误:“您可能需要一个合适的加载程序来处理此文件类型”。

很明显,我从来没有在我的代码中使用过
bar
,那么为什么webpack会试图捆绑它呢?如何避免这种情况?

在“规则”节点下的webpack.config.json中添加以下行:


你想要达到的是树的震动。要启用树抖动,您必须配置一些优化设置,如图所示

然而,即使有这些设置,这个问题也无法解决。这是因为-死代码消除或树抖动发生在模块解析发生之后。你可以把它看作是一个在它生成之后运行优化束的东西。Webpack将尝试查找用于导入
svg
文件的加载程序

您可以尝试的东西很少,但没有一件在不进行任何安装的情况下能够满足您的需要:

  • (最有助于满足您的需求)

谢谢。我已经知道如何添加一个合适的加载器,但我想知道,如果我从未使用或包含需要它的代码的某些部分,为什么我首先需要它。我觉得webpack应该对这些东西很“聪明”。好吧,我想我现在明白了。所以,无论我是否使用某段代码,webpack都需要能够在摇树和优化之前评估所有内容?谢谢。@eudoxyz你说得对。Webpack需要在运行优化之前创建完整的依赖关系图。如果Rollup.js做得不一样,您可以尝试它,因为它更具攻击性。但我不完全确定。如果我尝试了魔法评论,我将如何继续?@eudoxyz类似于:
import(/*webpackExclude:/\.svg$/)*/”/baz.svg”)
{
test: /\.(png|jpg|gif|svg)$/i,
  use: [
    {
      loader: 'url-loader',
      options: {
        limit: 8192
      }
    }
  ]
},