webpack.start.js 3.8 KB

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