Я создаю пакет внешнего интерфейса, который будет экспортировать 1 компонент React для импорта и рендеринга других пакетов. Я пытаюсь использовать webpack для объединения моего компонента React, однако мне кажется, что мне не удается экспортировать свой компонент из пакета.
Я тестирую пакет, импортируя dist/bundle
непосредственно в рассказ сборника рассказов для рендеринга.
Вот наивный пример того, что я пытаюсь сделать:
// index.js
import React from "react";
export const ComponentToExport = () => <h1>Hello World!</h1>;
// webpack.config.js
const path = require("path");
module.exports = {
entry: "./app/index.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js",
libraryTarget: "umd",
},
module: {
rules: [
{
// transpile with babel
test: /\.(js|jsx)?$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
],
},
};
Затем я запускаю webpack --mode development
, который создает пакет, dist/bundle.js
.
У меня есть история в сборнике рассказов. Я пытаюсь импортировать пакет из dist и визуализировать его:
// app.stories.js
import React from "react";
import { ComponentToExport } from "../dist/bundle.js";
console.log("ComponentToExport: ", ComponentToExport);
export default { title: "RemoteComponentExample" };
export const example = () => (<ComponentToExport />);
Я ожидаю, что история с «Hello World» будет напечатана на однако я вижу эту ошибку:
React.createElement: 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.
Также в заявлении console.log(ComponentToExport)
в моей истории я получаю undefined
в моих инструментах разработчика.
Я не верю, что компонент экспортируется из dist/bundle.js
. Я пробовал изменить libraryTarget
в конфигурации веб-пакета вместе с добавлением / удалением некоторых других параметров, но, похоже, ничего не работает.
Что нужно изменить в моей конфигурации веб-пакета, чтобы пакет правильно экспортировал ComponentToExport
компонент, чтобы его можно было импортировать в другие файлы и, в конечном итоге, использовать другие пакеты?