Настройка веб-пакета для экспорта в заданную папку - PullRequest
0 голосов
/ 02 июля 2019

Я работаю над старым проектом, все еще работающим с jquery для внешнего интерфейса, java spring для внутреннего интерфейса и maven для сборки.Мой босс попросил меня ввести реакцию в стек, чтобы мы могли поиграть с конвертированием некоторых страниц.

Моя цель - не сильно влиять на существующую реализацию, а вместо этого выводить результат веб-пакета в определенный каталог.Таким образом, я могу просто указать бэкэнду в этом месте для прохождения пути.

Пока у меня в рабочей области есть папка с приложениями, в которой содержатся все мои реакции, которые работают сами по себе.Это было сгенерировано с использованием 'npx create-response-app folderName'.

Я немного прочитал о том, как настроить экспорт, но в целом запутался.Как я обнаружил, многие ресурсы предполагают новую настройку или замену существующей.Пока я смотрю, чтобы заменить только одну страницу в настоящее время.

1 Ответ

1 голос
/ 02 июля 2019

Я не думаю, что create-react-app является правильным инструментом, так как вы не создаете полное приложение с React, а постепенно добавляете код React.Я бы предложил использовать Webpack самостоятельно.Это делает ваше приложение более чистым и его легче поддерживать с другим кодом.

Если вы хотите отделить код React от существующего кода, вы можете создать библиотеку на основе Руководства по созданию библиотек веб-пакета ,Вы можете визуализировать ваши компоненты с помощью ReactDOM.render() ( Docs ).Обратите внимание, что вы можете вызывать эту функцию (почти) неограниченное количество раз на одной странице, что позволяет вам частично заменить существующий код.

Замена страницы означает создание корневого элемента DOM и вызов функции render:

<!-- page.html -->
<html>
    <head></head>
    <body>
        <!-- more html -->
        <div id="page-root" />
        <!-- more html -->
    </body>
</html>
import React from 'react'
import ReactDOM from 'react-dom'
import Page from './routes/YourPageComponent'

ReactDOM.render(<Page />, document.getElementById('page-root'));

Предыдущий код означает, что вы отображаете свой код в новом коде, который передается вашими загрузчиками веб-пакетов (например, Babel-Loader, Typescript-Loader).Если вы хотите отобразить код в существующем коде, посмотрите документ о библиотеках Webpack , чтобы экспортировать функции визуализации в глобальный контекст.Следующие сценарии являются примером из моей головы.

// components/PageExampleComponent.jsx
import React from 'react';

export default function({pageTitle="example"}){
    return <div>
        <h1>{pageTitle}</h1>
    </div>
}



// libary/index.js
import PageExampleComponent from './components/PageExampleComponent';

export const MyLibrary = {
    PageExampleComponent
}

Предыдущий код требует следующую (частичную) конфигурацию Webpack для экспорта MyLibrary:

module.exports = {
  //...
  output: {
    library: 'MyLibrary',
    // based on a fast look into the docs, I think the following are optional:
    libraryTarget: 'window',
    libraryExport: 'default'
  }
};

Чтобы отобразить компонентэтой библиотеки вам нужны React и ReactDOM в качестве скриптов на вашем веб-сайте - и, конечно, ваш собственный библиотечный скрипт.Затем вы можете позвонить ReactDOM.render() простым JavaScript:

ReactDOM.render(
    React.createElement(window.MyLibrary.PageExampleComponent),
    document.getElementById('page-root')

Другая идея - перенести все в Webpack.Это может быть проще, поскольку у вас нет барьеров для различных версий Javascript и диалектов (например, с поддержкой JSX и без нее).Вы даже можете разделить код jQuery и код React, используя две точки входа:

module.exports = {
  //...
  entry: {
    oldCode: './src/jqueryIndex.js',
    replacement: './src/reactIndex.js'
  },
  output: {
    filename: "[name].js"
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...