reactjs - webpack 包括整个库而不是其中的一部分

标签 reactjs webpack

我有一个简单的组件,我正尝试在我的构建过程中使用 webpack,所以我有类似的东西

import React      from 'react';
import { AppBar } from 'material-ui';

export default () => (
  <AppBar
    title="Octopus"
    showMenuIconButton={ false }
    iconElementRight={<SaveLoadAnimation/>}
  />
);

我正在使用外部 AppBar 组件。在我的构建过程中,我像这样从包中排除了 React:

externals: {
    react: {
      root: 'React',
      commonjs2: 'react',
      commonjs: 'react',
      amd: 'react'
    }
}

问题在于 Webpack 在构建时包含了整个 material-ui 库,而不仅仅是 AppBar 组件。有解决办法吗?

最佳答案

您正在从导出所有组件的 material-ui 主文件导入。

参见: https://github.com/callemall/material-ui/blob/master/src/index.js

您可以尝试直接定位一个组件。例如

import AppBar from 'material-ui/lib/app-bar';

这可能可能有效,但我还没有尝试过。

Webpack 第 2 版有一个很酷的新功能,叫做 tree shaking。这允许 bundle 自动摆脱任何未使用的多余代码。如果上述方法不起作用,这可能是另一种选择。

这是一个使用 Webpack 2 及其 tree shaking 功能的示例应用程序: https://github.com/ModusCreateOrg/budgeting-sample-app-webpack2


更新

material-ui 上有一个讨论更好的导入和 tree shaking 的线程。
请参阅:https://github.com/callemall/material-ui/issues/2679

关于reactjs - webpack 包括整个库而不是其中的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36694935/

相关文章:

javascript - 使用 webpack-dev-server 进行轮询

javascript - React firebase auth() setState 在 then() 内不起作用

reactjs - Material UI 禁用复选框悬停

webpack - 如何在命令行中删除文件名中包含特定单词的文件?

javascript - 在Rails中使用ES6语法和Javascript压缩的直接,受支持的稳定方法是什么?

webpack - 使用 webpack 从动态源输出 UMD 模块

javascript - React 中的完整日历类型错误 : Cannot read property 'calendar' of undefined

javascript - 有人有使用 @material-ui/pickers Calendar API 的经验吗?

reactjs - 使用yarn + webpack从fork安装npm包 - 无法解析'./dist/

node.js - 找不到模块 : Error: Cannot resolve 'file' or 'directory'