Использовать модули соответствующего дочернего пакета при выполнении пакета

Настраивать

Я создал проект с 3 пакетами npm; корень, клиент и сервер. Каждый пакет содержит зависимости, в которых они нуждаются; У root есть инструменты сборки, у клиента есть реакция, у сервера есть экспресс - вы поняли.

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

/node_modules
/package.json
/webpack.config.js
/...etc

/dist
├── server-bundle.js
└── client-bundle.js

/client
├── node_modules/
├── package.json
└── src/

/server
├── node_modules/
├── package.json
└── src/
    └── index.ts

Конфигурация вебпака:

module.exports = [
  {
    entry: "./client/src/index.tsx",
    mode: "development",
    output: {
      filename: "client-bundle.js",
      path: __dirname + "/dist"
    },
    devtool: "source-map",
    resolve: {
      extensions: [".ts", ".tsx", ".js", ".json"]
    },

    module: {
      noParse: /node_modules/,
      rules: [
        { test: /\.tsx?$/, loader: "ts-loader" },
        { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
      ]
    },
    externals: {
      "react": "React",
      "react-dom": "ReactDOM"
    },
  },
  {
    entry: "./server/src/index.ts",
    mode: "development",
    output: {
      filename: "server-bundle.js",
      path: __dirname + "/dist"
    },
    resolve: {
      extensions: [".ts", "tsx", ".js", ".json"]
    },

    module: {
      noParse: /node_modules/,
      rules: [
        { test: /\.tsx?$/, loader: "ts-loader" },
      ],
    },
  }
];

Проблема

Сборка и сборка работают нормально, но при запуске сервера node dist/server-bundle.js я получаю сообщение об ошибке, что узел Cannot find the modules 'express' так как корневой пакет не имеет этой зависимости.

Перемещение всех зависимостей в корень решит все проблемы.

Вопрос

Есть ли способ заставить его работать с этой структурой, или я ошибаюсь в своем концептуальном подходе?

Почему вы связываете серверный код?

Townsheriff 06.04.2019 22:41

Хороший вопрос, нет причин. Думаю, я хотел, чтобы весь код проходил через один и тот же поток (в данном случае через веб-пакет). Обновлено: Быстрый Google сообщит вам о нескольких преимуществах объединения бэкэнда.

Fredrik Schön 06.04.2019 22:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто переместите свои /dist/ в проекты, client/dist/ и server/dist/ в вашем случае.

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