Все оказалось интереснее чем я думал.
для того чтобы запустить сборку нормально нужно было собрать бандл админки используя пакет
@adminjs/bundler
после этого закидывать эти бандлы в папку assets уже для конечного webpack билда.
далее указать в adminOptions как CDN базовый путь до админки
assetsCDN: "localhost:4002"
и далее как статику указать в express папку
assets
app.use(express.static("/assets"));
После чего в конфиге webpaсk для модулей были прописаны правила дополнительные, так же к CopyPlugin были добавлены 2 паттерна. Первый грузит в webpack папку assets, второй бандлы из
@adminjs/design-system
Вот финальный вариант конфига для админки получился:
const path = require("path");
const DefinePlugin = require("webpack/lib/DefinePlugin");
const CopyPlugin = require("copy-webpack-plugin");
const variables = require("./variables");
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
app: "./index.ts",
},
target: 'node',
externals: [
nodeExternals(),
// https://github.com/webpack/webpack/issues/4879
// our engine: "pg",
"mysql",
"pg-hstore",
"pg-native",
"tedious",
"sqlite3",
// does not exist for linux
"fsevents",
],
externalsPresets: {
node: true
},
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
{
test: /.node$/,
loader: 'node-loader',
},
{
test: /backend[/\\]utils[/\\]router[/\\]router\.js/,
loader: "string-replace-loader",
options: {
search: /require\.resolve\(['"]@adminjs\/design-system['"]\)/g,
replace: "'./assets/'",
},
},
{
test: /adminjs\.js/,
loader: "string-replace-loader",
options: {
search: /const pkg = .*?\)\)/g,
replace: "const pkg = {version:'6.8.3'}",
},
},
],
},
resolve: {
extensions: [".ts", ".tsx", ".js"],
fallback: {
"stream": require.resolve("stream-browserify"),
"http": require.resolve("stream-http"),
},
},
output: {
filename: "admin.bundle.js",
path: path.resolve(__dirname, "admin"),
},
mode: process.env.NODE_ENV,
devtool: "source-map",
devServer: {
static: path.resolve(__dirname, "admin"),
devMiddleware: {
writeToDisk: false,
},
open: false,
hot: false,
liveReload: true,
},
plugins: [
new CopyPlugin({
patterns: [
{
from: "table.sql",
to: "table.sql",
context: "../../node_modules/connect-pg-simple/",
},
{
from: "assets",
to: "assets",
},
{
from: "bundle.*.js",
to: "[name].js",
context: "../../node_modules/@adminjs/design-system",
}
],
}),
new DefinePlugin({
"process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
"process.env.VERSION": JSON.stringify(variables.version),
}),
],
optimization: {
minimize: false,
},
};