Я создал проект с 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'
так как корневой пакет не имеет этой зависимости.
Перемещение всех зависимостей в корень решит все проблемы.
Есть ли способ заставить его работать с этой структурой, или я ошибаюсь в своем концептуальном подходе?
Хороший вопрос, нет причин. Думаю, я хотел, чтобы весь код проходил через один и тот же поток (в данном случае через веб-пакет). Обновлено: Быстрый Google сообщит вам о нескольких преимуществах объединения бэкэнда.
Просто переместите свои /dist/
в проекты, client/dist/
и server/dist/
в вашем случае.
Почему вы связываете серверный код?