webpack.dev.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * @fileoverview demo.
  3. *
  4. * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
  5. * @version 0.1.0.0, Jan 24, 2019
  6. */
  7. const path = require('path')
  8. const fs = require('fs')
  9. const webpack = require('webpack')
  10. const CleanWebpackPlugin = require('clean-webpack-plugin')
  11. const HtmlWebpackPlugin = require('html-webpack-plugin')
  12. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  13. const WebpackOnBuildPlugin = require('on-build-webpack')
  14. const pkg = require('./package.json')
  15. module.exports = {
  16. mode: 'development',
  17. watch: true,
  18. output: {
  19. filename: '[name]',
  20. path: path.resolve(__dirname, 'demo/dist'),
  21. },
  22. entry: {
  23. 'index.js': './demo/index.js',
  24. },
  25. resolve: {
  26. extensions: ['.js', '.ts', '.svg', '.png', '.scss'],
  27. },
  28. module: {
  29. rules: [
  30. {
  31. test: /\.scss$/,
  32. include: [path.resolve(__dirname, 'src')],
  33. use: [
  34. {
  35. loader: 'style-loader',
  36. },
  37. {
  38. loader: 'css-loader', // translates CSS into CommonJS
  39. options: {
  40. url: false,
  41. },
  42. },
  43. {
  44. loader: 'postcss-loader',
  45. options: {
  46. ident: 'postcss',
  47. plugins: () => [
  48. require('autoprefixer')({grid: true, remove: false}),
  49. ],
  50. },
  51. },
  52. {
  53. loader: 'sass-loader', // compiles Sass to CSS
  54. },
  55. ],
  56. },
  57. {
  58. test: /\.svg$/,
  59. include: [path.resolve(__dirname, './src/assets/icons')],
  60. use: [
  61. {
  62. loader: 'html-loader',
  63. options: {
  64. minimize: true,
  65. },
  66. },
  67. ],
  68. },
  69. {
  70. test: /\.ts$/,
  71. use: 'ts-loader',
  72. },
  73. {
  74. test: /\.js$/,
  75. exclude: '/node_modules/',
  76. use: {
  77. loader: 'babel-loader',
  78. options: {
  79. presets: [
  80. [
  81. '@babel/env',
  82. {
  83. targets: {
  84. browsers: [
  85. 'last 2 Chrome major versions',
  86. 'last 2 Firefox major versions',
  87. 'last 2 Safari major versions',
  88. 'last 2 Edge major versions',
  89. 'last 2 iOS major versions',
  90. 'last 2 ChromeAndroid major versions',
  91. ],
  92. },
  93. },
  94. ],
  95. ],
  96. },
  97. },
  98. },
  99. {
  100. test: /\.png$/,
  101. include: [path.resolve(__dirname, './src/assets/images')],
  102. use: [
  103. 'file-loader',
  104. ],
  105. },
  106. ],
  107. },
  108. plugins: [
  109. new HtmlWebpackPlugin({
  110. chunks: ['index.js'],
  111. filename: './index.html',
  112. template: './demo/index.html',
  113. }),
  114. new webpack.DefinePlugin({
  115. VDITOR_VERSION: JSON.stringify(pkg.version),
  116. })
  117. ],
  118. devServer: {
  119. contentBase: path.join(__dirname, '.'),
  120. port: 9000,
  121. host: '0.0.0.0',
  122. proxy: {
  123. '/api': {
  124. target: 'http://localhost:8080',
  125. pathRewrite: {'^/api' : ''}
  126. },
  127. '/hacpai': {
  128. target: 'https://hacpai.com',
  129. pathRewrite: {'^/hacpai' : ''}
  130. }
  131. }
  132. }
  133. }