webpack.common.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. module.exports = {
  13. entry: path.resolve(__dirname, 'src', 'frontend', 'index.tsx'),
  14. module: {
  15. rules: [
  16. {
  17. test: /\.tsx?$/,
  18. use: 'ts-loader',
  19. exclude: /node_modules/,
  20. },
  21. {
  22. test: /\.css$/i,
  23. use: ["style-loader", "css-loader"],
  24. },
  25. {
  26. test: /\.svg$/,
  27. use: 'url-loader'
  28. },
  29. ],
  30. },
  31. resolve: {
  32. extensions: ['.tsx', '.ts', '.js'],
  33. fallback: {
  34. // allow using absolute paths when referring to 'onion' library.
  35. onion: path.resolve(__dirname, 'src', 'onion'),
  36. // Dirty fake polyfill - should remove this at some point.
  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. };