1
0

webpack.config.mjs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import * as path from 'path'
  2. import * as url from 'url'
  3. const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
  4. const externals = {}
  5. for (const key of [
  6. 'child_process',
  7. 'crypto',
  8. 'dns',
  9. 'fs',
  10. 'http',
  11. 'https',
  12. 'net',
  13. 'path',
  14. 'querystring',
  15. 'tls',
  16. 'tty',
  17. 'zlib',
  18. '../build/Release/cpufeatures.node',
  19. './crypto/build/Release/sshcrypto.node',
  20. ]) {
  21. externals[key] = `commonjs ${key}`
  22. }
  23. const config = {
  24. name: 'tabby-web-entry',
  25. target: 'web',
  26. entry: {
  27. preload: path.resolve(__dirname, 'entry.preload.ts'),
  28. bundle: path.resolve(__dirname, 'entry.ts'),
  29. },
  30. mode: process.env.TABBY_DEV ? 'development' : 'production',
  31. optimization:{
  32. minimize: false,
  33. },
  34. context: __dirname,
  35. devtool: 'source-map',
  36. output: {
  37. path: path.join(__dirname, 'dist'),
  38. pathinfo: true,
  39. filename: '[name].js',
  40. publicPath: 'auto',
  41. },
  42. resolve: {
  43. modules: ['../app/node_modules', 'node_modules', '../node_modules', '../app/assets/'].map(x => path.join(__dirname, x)),
  44. extensions: ['.ts', '.js'],
  45. fallback: {
  46. stream: path.join(__dirname, 'node_modules/stream-browserify/index.js'),
  47. assert: path.join(__dirname, 'node_modules/assert/assert.js'),
  48. constants: path.join(__dirname, 'node_modules/constants-browserify/constants.json'),
  49. util: path.join(__dirname, 'node_modules/util/util.js'),
  50. },
  51. },
  52. module: {
  53. rules: [
  54. {
  55. test: /\.ts$/,
  56. use: {
  57. loader: 'ts-loader',
  58. options: {
  59. configFile: path.resolve(__dirname, 'tsconfig.json'),
  60. },
  61. },
  62. },
  63. { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
  64. { test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
  65. {
  66. test: /\.(png|svg|ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
  67. type: 'asset',
  68. },
  69. ],
  70. },
  71. externals,
  72. }
  73. export default () => config