webpack.config.cjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const path = require('path');
  2. const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
  3. const child_process = require('child_process');
  4. const webpack = require('webpack');
  5. let revision;
  6. try {
  7. revision = child_process.execSync('git rev-parse HEAD').toString();
  8. }
  9. catch (e) {
  10. revision = "unknown";
  11. }
  12. // export default {
  13. module.exports = {
  14. entry: path.resolve(__dirname, 'src', 'frontend', 'index.tsx'),
  15. module: {
  16. rules: [
  17. {
  18. test: /\.tsx?$/,
  19. use: 'ts-loader',
  20. exclude: /node_modules/,
  21. },
  22. {
  23. test: /\.css$/i,
  24. use: ["style-loader", "css-loader"],
  25. },
  26. {
  27. test: /\.svg$/,
  28. use: 'url-loader'
  29. },
  30. ],
  31. },
  32. resolve: {
  33. extensions: ['.tsx', '.ts', '.js'],
  34. fallback: {
  35. // allow using absolute paths when referring to 'onion' library.
  36. onion: path.resolve(__dirname, 'src', 'onion'),
  37. util: path.resolve(__dirname, 'src', 'util', 'mock_node_util.ts'),
  38. // The following are needed to make NodeJS' 'crypto' module work in the browser:
  39. // Should probably migrate to the SubtleCrypto Web API
  40. crypto: require.resolve('crypto-browserify'),
  41. stream: require.resolve('stream-browserify'),
  42. buffer: require.resolve('buffer'),
  43. },
  44. },
  45. output: {
  46. filename: 'bundle.js',
  47. path: path.resolve(__dirname, 'dist'),
  48. },
  49. devServer: {
  50. static: path.resolve(__dirname, 'dist'),
  51. port: 9000,
  52. },
  53. plugins: [
  54. new ForkTsCheckerWebpackPlugin(),
  55. new webpack.DefinePlugin({
  56. REVISION: JSON.stringify(revision),
  57. }),
  58. ]
  59. };