Сборка проекта с использованием webpack
Создаю web-проект на TS, структура приложения следующая: в корне есть папка src в которой находятся подпапки client, server. Каждая из них несет в себе соответствующие файлы. Проект хочу запускать одной командой, сейчас использую concurrently.
Подключил и настроил webpack и babel, однако возникли вопросы по их применению:
- Если создать 2 конфига и запускать их через concurrently будет ли всё работать в том числе горячая перезагрузка? Как написать такие конфиги? Мой используемый вариант ниже
- При сборке наименования будут кешероваться. Смогут ли части приложения общаться друг с другом?
- Как запустить такое собранное приложение командой?
webpack.config.cjs, так как использую "type": "module"
const path = require('path');
// eslint-disable-next-line import/no-extraneous-dependencies
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// eslint-disable-next-line import/no-extraneous-dependencies
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
devtool: 'source-map',
entry: './src/server/app.ts',
output: {
path: path.resolve(__dirname, 'build'),
filename: 'bundle.js',
},
mode: 'development',
resolve: {
extensions: ['.ts', '.tsx', '.js'],
},
module: {
rules: [{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.jsx?$/,
use: 'babel-loader',
include: `${__dirname}/src`,
},
{
test: /\.css/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
esModule: true,
sourceMap: true,
modules: {
localIdentName: '[path][name]__[local]--[hash:base64:5]',
},
},
},
],
},
],
},
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
preset: [
'default',
{
discardComments: {
removeAll: true
},
},
],
},
}),
],
},
plugins: [new MiniCssExtractPlugin()],
};
При сборке, используя текущий конфиг, получаю пару файлов но они бесполезные, нерабочие. Понимаю это потому что в проекте использую express и postgresql и без node скомпилированные файлы бесполезны.
Возможно я где-то не прав или недостаточно точен в формулировках, поэтому готов дополнить вопрос