webpack.config.js 1.9 KB

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