javascript - 使用 Webpack 4 构建 React 组件库

标签 javascript reactjs webpack

我目前正在构建一个 React 组件库并将其与 Webpack 4 捆绑在一起。

从构建库的包到将其发布到 npm 注册表,一切都运行良好。

但是,我无法在其他 React 应用程序中导入它的任何组件并在运行时收到此错误消息:

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

相关代码如下:

我的组件库中的一个dumb组件: 按钮/index.js

import React from "react";

const Button = () => <button>Foobar</button>;

export { Button };

我的库 index.js 的主要入口点:

import { Button } from "./src/components/Button";

export { Button };

我的 Webpack 配置 webpack.config.js:

const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

module.exports = {
  entry: "./index.js",
  plugins: [new CleanWebpackPlugin()],
  module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  },
  output: {
    filename: "index.js",
    path: path.resolve(__dirname, "dist"),
    libraryTarget: "commonjs",
    library: ""
  }
};

最后,在其他应用程序中导入此组件:

import { Button } from "my-design-system";

我想我的 Webpack 配置中遗漏了一些东西,或者其中一个属性可能是错误的,但是在阅读了多篇文章和教程之后,我无法确定是哪一个。

最佳答案

您正在将您的库导出为 commonjs 并尝试通过 import/export 语法导入它。您应该将输出更改为

output: {
  filename: "index.js",
  path: path.resolve(__dirname, "dist"),
  libraryTarget: "umd",
  library: "my-design-system"
}

在这里找到了很多信息:https://webpack.js.org/guides/author-libraries/

关于javascript - 使用 Webpack 4 构建 React 组件库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970495/

相关文章:

javascript - IE 忽略了我的 js

javascript - jQuery Datatable - 来自 ajax 调用的错误消息

javascript - 如何去除 Material UI 的 DatePicker 的边框?

reactjs - 无法使用 Webpack 加载 font-awesome

reactjs - webpack sass-loader 不生成类选择器样式

javascript - jQuery UI - 表 tbody 在 JS 生成的 HTML 上不可排序()(npm webpack 应用程序)

javascript - 数组算法是否失败?/什么是 NewTarget?

javascript - validateFieldsAndScroll 不起作用并且无法读取未定义的属性 'match'

reactjs - 创建一个asp.net 5项目来保存常见的js模块

javascript - 无法更改 div 标签的 html 内容