Совместное использование кода между проектом Typescript React и проектом Typescript Express

Я пытался придумать элегантное решение для разделения кода между двумя проектами, которые тесно связаны друг с другом. У меня есть веб-приложение React, которое просто включает в себя весь клиентский код, и у меня есть приложение Express, которое обслуживает веб-приложение React, но также действует как API. Поскольку я использую Typescript для обоих проектов, я хочу повторно использовать некоторые типы. Для этого я создал проект shared.

Моя текущая структура папок выглядит следующим образом:

  • веб-приложение
  • общий
  • сервер

Теперь я хочу связать проекты web-app и server с моим проектом shared, но есть некоторые ограничения:

  1. Эту общую папку не следует загружать в npm.
  2. Я все еще должен иметь возможность развертывать все с помощью Heroku (что, как мне кажется, исключает npm link).
  3. Я бы предпочел не отказываться от своего проекта React.

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

Вы когда-нибудь догадывались об этом? Я борюсь с этим прямо сейчас.

camden 02.02.2020 02:38

Если вы смотрите на это, но используете React-Native, вам также необходимо изменить конфигурацию метро. medium.com/@dushyant_db/…

Jono 04.09.2020 18:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
2
609
1

Ответы 1

Если вы используете create-react-app для создания веб-приложения, вы можете легко использовать переменную среды NODE_PATH для абсолютного импорта без создания узловых модулей.

  1. Создайте файл .env на корневом уровне (на том же уровне, что и package.json каталога web-app)
  2. Задайте для переменной среды NODE_PATH значение shared/ (NODE_PATH=shared/)

Теперь вместо того, чтобы делать что-то вроде

import { editUser } from ‘../../../shared/actions’;

вы можете использовать

import { editUser } from ‘shared/actions’;

Исправление ESLint

Установите eslint-plugin-import, чтобы eslint не выдавал ошибки импорта. И обновите файл .eslintrc как

{
    "settings": {
        "import/resolver": {
            "node": {
                "moduleDirectory": ["node_modules", "shared/"]
            }
        }
    }
}

Исправление потока

Добавьте следующий контент в ваш файл .flowconfig

[options]
module.system.node.resolve_dirname=node_modules
module.system.node.resolve_dirname=shared

А что с проектом server? tsc также плохо работает с импортом из-за пределов корневой папки.

Bram Vanbilsen 02.10.2018 12:56

Да, установка baseUrl плохо работает с tsc. Но мне просто интересно, что если создать символическую ссылку на каталог shared внутри каталога server и использовать ее для импорта модулей, это может сработать.

Abinash Panda 02.10.2018 13:08

Я прочитал несколько ответов SO, что использование символической ссылки не будет работать с Heroku.

Bram Vanbilsen 02.10.2018 13:20
NODE_PATH устарел в пользу baseUrl
RMalke 28.01.2020 23:18

Другие вопросы по теме