102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
import type {ServiceConfig} from '@gravity-ui/app-builder';
|
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
import type {FileCacheOptions, MemoryCacheOptions} from 'webpack';
|
|
|
|
const appDirectory = fs.realpathSync(process.cwd());
|
|
const resolveApp = (relativePath: string) => path.resolve(appDirectory, relativePath);
|
|
|
|
const getFileCacheConfig = () => {
|
|
if (process.env.APP_ENV === 'development') {
|
|
return {
|
|
type: 'filesystem',
|
|
} as FileCacheOptions;
|
|
} else {
|
|
return {
|
|
type: 'memory',
|
|
} as MemoryCacheOptions;
|
|
}
|
|
};
|
|
|
|
const vendors = (vendorsList: string[]) => {
|
|
return vendorsList.concat([
|
|
'react-split-pane',
|
|
'react-dnd',
|
|
'react-grid-layout',
|
|
'react-beautiful-dnd',
|
|
'@floating-ui/react',
|
|
]);
|
|
};
|
|
|
|
const devClientPort = process.env?.['DEV_CLIENT_PORT'];
|
|
const devServerPort = process.env?.['DEV_SERVER_PORT'];
|
|
|
|
const config: ServiceConfig = {
|
|
client: {
|
|
bundler: 'rspack',
|
|
alias: {
|
|
i18n: 'src/i18n',
|
|
shared: 'src/shared',
|
|
ui: 'src/ui',
|
|
},
|
|
modules: [
|
|
'node_modules',
|
|
resolveApp('node_modules'),
|
|
resolveApp('src/ui'),
|
|
resolveApp('src/ui/units'),
|
|
],
|
|
includes: ['src/shared', 'src/i18n', 'node_modules/monaco-editor/esm/vs'],
|
|
excludeFromClean: ['!i18n', '!i18n/**/*'],
|
|
vendors,
|
|
icons: ['src/ui/assets/icons', 'node_modules/@gravity-ui/icons'],
|
|
monaco: {
|
|
languages: ['typescript', 'javascript', 'json', 'sql', 'mysql'],
|
|
},
|
|
polyfill: {
|
|
process: true,
|
|
},
|
|
disableReactRefresh: true,
|
|
contextReplacement: {
|
|
locale: ['ru', 'en'],
|
|
},
|
|
watchOptions: {
|
|
ignored: '**/server',
|
|
aggregateTimeout: 1000,
|
|
},
|
|
cache: getFileCacheConfig(),
|
|
externals: {
|
|
highcharts: 'Highcharts',
|
|
},
|
|
fallback: {
|
|
url: require.resolve('url'),
|
|
'react/jsx-runtime': require.resolve('react/jsx-runtime'),
|
|
path: false,
|
|
fs: false,
|
|
'cose-base': false,
|
|
'layout-base': false,
|
|
'highlight.js': false,
|
|
buffer: false,
|
|
},
|
|
javaScriptLoader: 'swc',
|
|
...(devClientPort
|
|
? {
|
|
devServer: {
|
|
port: parseInt(devClientPort, 10),
|
|
},
|
|
}
|
|
: {}),
|
|
},
|
|
server: {
|
|
watch: ['dist/i18n', 'dist/shared'],
|
|
...(devServerPort
|
|
? {
|
|
port: parseInt(devServerPort, 10),
|
|
}
|
|
: {}),
|
|
},
|
|
};
|
|
|
|
export default config;
|