Я создаю веб-приложение, используя React, TypeScript, Ant Design и mobX. Я использовал это как шаблон .
Я создаю что-то, что я хотел бы построить на двух поддоменах, один для клиентов (www.my-app-name.com) и один для администраторов (admin.my- app-name.com).
Я не хочу создавать целый другой проект для стороны администратора, так как есть много кода, который нужно скопировать, и я не хочу делать который. У меня есть несколько вопросов:
Способ к go, создание нескольких точек входа с помощью Webpack? Если да, то как? а затем, как бы я изменил сценарии в пакете. json на start
и build
эти два "сайта"
Я размещаю приложение на Google App Engine, является можно разместить несколько поддоменов, используя разные папки сборки, которые будут созданы из моего предыдущего вопроса?
Вот мой файл webpack.config. js:
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = () => {
const prod = process.env.NODE_ENV === 'production';
const styleLoader = (loaders = []) => [
prod ? MiniCssExtractPlugin.loader : 'style-loader',
'css-loader',
...loaders
];
return {
mode: prod ? 'production' : 'development',
devtool: prod ? 'source-map' : 'cheap-module-eval-source-map',
entry: './src/index.tsx',
output: {
path: path.resolve('./build'),
filename: prod ? 'js/[name].[contenthash:8].js' : 'js/[name].js',
publicPath: ''
},
module: {
rules: [
{
test: /\.(jsx?|tsx?)$/,
exclude: /node_modules/,
use: 'babel-loader'
},
{
test: /\.css$/,
use: styleLoader()
},
{
test: /\.scss$/,
use: styleLoader([
{
loader: 'sass-loader',
options: {
implementation: require('sass')
}
}
])
},
{
test: /\.svg$/,
loader: 'url-loader'
},
{
test: /\.png$/,
loader: 'url-loader'
},
{
test: /\.jpg$/,
loader: 'url-loader'
},
{
test: /\.less$/,
use: [{ loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'less-loader' }]
},
{
test: /\.ico$/,
loader: 'file-loader'
},
{
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto'
}
]
},
resolve: {
modules: ['node_modules', 'src'],
extensions: ['.ts', '.tsx', '.js', '.jsx', '.wasm', '.mjs', '.json']
},
devServer: {
contentBase: './',
disableHostCheck: true,
// host: "0.0.0.0",
// useLocalIp: true,
open: 'Google Chrome',
hot: true,
publicPath: '/',
historyApiFallback: true
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html'
}),
new webpack.EnvironmentPlugin({
...process.env
}),
prod &&
new MiniCssExtractPlugin({
filename: 'css/[name].[contenthash:8].css'
})
].filter(Boolean)
};
};
и мой пакет. json файл:
{
"name": "my-app-name",
"version": "0.1.0",
"scripts": {
"start": "NODE_ENV=development webpack-dev-server --mode development --hot --inline --content-base=dist --history-api-fallback",
"build": "NODE_ENV=production webpack",
"git-push": "git add . && git commit && git push"
},
"dependencies": {
"@ant-design/icons": "^4.0.5",
"@types/node": "^13.11.1",
"antd": "^4.1.1",
"antd-password-input-strength": "^1.1.1",
"aws-amplify": "^3.0.7",
"ev-ui": "^0.4.2",
"json2typescript": "^1.2.5",
"less": "^3.11.1",
"less-loader": "^5.0.0",
"mobx": "^5.10.0",
"mobx-react": "^6.0.3",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router-dom": "^5.0.1",
"sass": "^1.22.1",
"sass-loader": "^7.1.0",
"styled-components": "^4.2.1"
},
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/plugin-proposal-class-properties": "^7.4.4",
"@babel/plugin-proposal-decorators": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"@babel/preset-react": "^7.0.0",
"@babel/preset-typescript": "^7.3.3",
"@types/react": "^16.8.19",
"@types/react-dom": "^16.8.4",
"@types/react-router-dom": "^4.3.3",
"@types/styled-components": "^4.1.16",
"babel-loader": "^8.0.6",
"babel-plugin-import": "^1.12.0",
"css-loader": "2.1.1",
"file-loader": "3.0.1",
"html-webpack-plugin": "3.2.0",
"mini-css-extract-plugin": "^0.7.0",
"postcss-loader": "^3.0.0",
"postcss-scss": "^2.0.0",
"style-loader": "^1.1.3",
"ts-loader": "^6.0.2",
"typescript": "^3.5.1",
"url-loader": "1.1.2",
"webpack": "4.33.0",
"webpack-cli": "^3.2.2",
"webpack-dev-server": "3.5.1"
}
}