mirror of
https://github.com/teableio/teable.git
synced 2026-01-15 01:42:23 +08:00
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
const path = require('path');
|
|
const CopyPlugin = require('copy-webpack-plugin');
|
|
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
|
|
const glob = require('glob');
|
|
const nodeExternals = require('webpack-node-externals');
|
|
|
|
module.exports = function (options, webpack) {
|
|
const workerFiles = glob.sync(path.join(__dirname, 'src/worker/**.ts'));
|
|
const workerEntries = workerFiles.reduce((acc, file) => {
|
|
const relativePath = path.relative(path.join(__dirname, 'src/worker'), file);
|
|
const entryName = `worker/${path.dirname(relativePath)}/${path.basename(relativePath, '.ts')}`;
|
|
acc[entryName] = file;
|
|
return acc;
|
|
}, {});
|
|
return {
|
|
...options,
|
|
entry: {
|
|
index: ['webpack/hot/poll?100', options.entry],
|
|
...workerEntries,
|
|
},
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: '[name].js',
|
|
},
|
|
mode: 'development',
|
|
devtool: 'source-map',
|
|
externals: [
|
|
nodeExternals({
|
|
allowlist: ['webpack/hot/poll?100', /^@teable/],
|
|
}),
|
|
],
|
|
// ignore tests hot reload
|
|
watchOptions: {
|
|
ignored: ['**/test/**', '**/*.spec.ts', '**/node_modules/**', '**/i18n.generated.ts'],
|
|
poll: 1000,
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.ts?$/,
|
|
loader: 'ts-loader',
|
|
options: {
|
|
transpileOnly: true,
|
|
happyPackMode: true,
|
|
},
|
|
exclude: [/node_modules/, /.e2e-spec.ts$/],
|
|
},
|
|
],
|
|
},
|
|
cache: {
|
|
type: 'filesystem',
|
|
allowCollectingMemory: true,
|
|
buildDependencies: {
|
|
// This makes all dependencies of this file - build dependencies
|
|
config: [__filename],
|
|
},
|
|
},
|
|
plugins: [
|
|
// filter default ForkTsCheckerWebpackPlugin to rewrite the ts config file path
|
|
// nest default tsconfig path is tsconfig.build.json
|
|
...options.plugins.filter((plugin) => !(plugin instanceof ForkTsCheckerWebpackPlugin)),
|
|
new webpack.HotModuleReplacementPlugin(),
|
|
new ForkTsCheckerWebpackPlugin({
|
|
typescript: {
|
|
configFile: 'tsconfig.json',
|
|
memoryLimit: 4096,
|
|
},
|
|
}),
|
|
new CopyPlugin({
|
|
patterns: [{ from: 'src/features/mail-sender/templates', to: 'templates' }],
|
|
}),
|
|
],
|
|
};
|
|
};
|