webpack.start.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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', '.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: /\.ts$/,
  58. use: 'ts-loader',
  59. },
  60. {
  61. test: /\.js$/,
  62. exclude: '/node_modules/',
  63. use: {
  64. loader: 'babel-loader',
  65. options: {
  66. presets: [
  67. [
  68. '@babel/env',
  69. {
  70. targets: {
  71. browsers: [
  72. 'last 2 Chrome major versions',
  73. 'last 2 Firefox major versions',
  74. 'last 2 Safari major versions',
  75. 'last 2 Edge major versions',
  76. 'last 2 iOS major versions',
  77. 'last 2 ChromeAndroid major versions',
  78. ],
  79. },
  80. },
  81. ],
  82. ],
  83. },
  84. },
  85. },
  86. {
  87. test: /\.png$/,
  88. include: [path.resolve(__dirname, './src/assets/images')],
  89. use: [
  90. 'file-loader',
  91. ],
  92. },
  93. ],
  94. },
  95. plugins: [
  96. new HtmlWebpackPlugin({
  97. chunks: ['index.js'],
  98. filename: './index.html',
  99. template: './demo/index.html',
  100. }),
  101. new HtmlWebpackPlugin({
  102. chunks: ['render.js'],
  103. filename: './render.html',
  104. template: './demo/render.html',
  105. }),
  106. new HtmlWebpackPlugin({
  107. chunks: ['jest-puppeteer.js'],
  108. filename: './jest-puppeteer.html',
  109. template: './demo/jest-puppeteer.html',
  110. }),
  111. new webpack.DefinePlugin({
  112. VDITOR_VERSION: JSON.stringify(pkg.version),
  113. }),
  114. new CopyPlugin({
  115. patterns: [
  116. {from: 'src/css', to: 'css'},
  117. {from: 'src/images', to: 'images'},
  118. {from: 'src/js', to: 'js'},
  119. {from: 'types', to: 'types'},
  120. ],
  121. }),
  122. ],
  123. devServer: {
  124. contentBase: path.join(__dirname, '.'),
  125. port: 9000,
  126. host: '0.0.0.0',
  127. before: (app) => {
  128. app.get('/dist/js/lute/lute.wasm.br', function (req, res, next) {
  129. res.set({
  130. 'Content-Encoding': 'br',
  131. 'Content-Type': 'application/wasm',
  132. })
  133. next()
  134. })
  135. },
  136. proxy: {
  137. '/api': {
  138. target: 'http://localhost:8080',
  139. pathRewrite: {'^/api': ''},
  140. },
  141. '/ld246': {
  142. target: 'https://ld246.com',
  143. pathRewrite: {'^/ld246': ''},
  144. },
  145. },
  146. },
  147. }