webpack.config.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const path = require('path');
  2. const HtmlWebpackPlugin = require("html-webpack-plugin");
  3. const webpack = require('webpack');
  4. const dotenv = require('dotenv');
  5. module.exports = () => {
  6. const env = dotenv.config().parsed;
  7. const envKeys = Object.keys(env).reduce((prev, next) => {
  8. prev[`process.env.${next}`] = JSON.stringify(env[next]);
  9. return prev;
  10. }, {});
  11. return {
  12. entry: './src/index.tsx',
  13. target: 'web',
  14. mode: 'development',
  15. module: {
  16. rules: [
  17. {
  18. test: /\.(ts|tsx)$/,
  19. loader: "ts-loader",
  20. },
  21. {
  22. enforce: "pre",
  23. test: /\.js$/,
  24. loader: "source-map-loader",
  25. },
  26. {
  27. test: /\.(png|svg|jpg|gif|mp3)$/,
  28. use: [
  29. 'file-loader'
  30. ]
  31. },
  32. { test: /\.css$/, use: [ 'css-loader' ] },
  33. {
  34. test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/,
  35. use: [
  36. {
  37. loader: 'file-loader',
  38. options: {
  39. name: '[name].[ext]',
  40. outputPath: 'fonts/'
  41. }
  42. }
  43. ]
  44. }
  45. ],
  46. },
  47. resolve: {
  48. modules: [path.resolve(__dirname, "src"), "node_modules"],
  49. extensions: ['*', '.tsx', '.ts', '.js', '.jsx', '.json'],
  50. },
  51. output: {
  52. filename: 'bundle.js',
  53. path: path.resolve(__dirname, 'build'),
  54. publicPath: '/'
  55. },
  56. devServer: {
  57. historyApiFallback: true,
  58. },
  59. plugins: [
  60. new HtmlWebpackPlugin({
  61. template: path.resolve(__dirname, "src", "index.html"),
  62. }),
  63. new webpack.DefinePlugin(envKeys)
  64. ]
  65. }
  66. };