Экспортируйте все реагирующие компоненты в файл пакета Webpack и используйте его в html-файле. - PullRequest
0 голосов
/ 11 марта 2019

У меня есть некоторые компоненты React, и я хочу создать пакетный файл, включающий их, и использовать его в другом HTML-файле.

Что я сделал: я создал файл конфигурации Webpack, который получает index.js в /src папка в качестве входного файла и генерирует пакетный файл, такой как components.js

I экспортировано все компоненты в файле /src/index.js, и я предполагаю, что все онидоступны после связывания с Webpack

Я использовал Внешний ключ в Webpack для генерации файла комплекта только из моего источника, а не из внешних библиотек

В конце я поместил скрипты реакции и связывания файла в файл HTMLи я хочу использовать их в качестве чисто функции JavaScript.

<html>
  <head>
    <title></title>
  </head>
  <body>
    <header id="headerContent"></header>
    <section id="newsContent"></section>
    <section id="categoryContent"></section>
    <footer id="footerContent" ></footer>

    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

    <script type="text/javascript" src="components.js"></script></body>

    <script>
        ReactDOM.render(React.createElement(HeaderComponent), document.getElementById("headerContent"))
        ReactDOM.render(React.createElement(NewsComponent), document.getElementById("newsContent"))
        ReactDOM.render(React.createElement(NewsComponent), document.getElementById("categoryContent"))
        ReactDOM.render(React.createElement(FooterComponent), document.getElementById("footerContent"))
    </script>
  </body>
</html>

Но это не работает.Неужели я что-то не так и какое лучшее решение?Webpack Config:

module.exports = {
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      },
      {
        test: /\.html$/,
        use: [
          {
            loader: "html-loader"
          }
        ]
      }
    ]
  },
  externals: {
    // Don't bundle the 'react' npm package with the component.
    'react': 'React',
    'react-dom' : 'ReactDOM'
  }
}

1 Ответ

0 голосов
/ 22 июня 2019

Простой способ - присвоить компонент переменной в объекте окна.Таким образом, нет необходимости изменять конфигурацию Webpack.

window.HeaderComponent = HeaderComponent

И мы можем использовать компоненты в других файлах HTML.

   <script>
        ReactDOM.render(React.createElement(window.HeaderComponent), document.getElementById("headerContent"))
        ReactDOM.render(React.createElement(window.NewsComponent), document.getElementById("newsContent"))
        ReactDOM.render(React.createElement(window.NewsComponent), document.getElementById("categoryContent"))
        ReactDOM.render(React.createElement(window.FooterComponent), document.getElementById("footerContent"))
    </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...