webpack.demo.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 MiniCssExtractPlugin = require('mini-css-extract-plugin')
  12. const WebpackOnBuildPlugin = require('on-build-webpack')
  13. const pkg = require('./package.json')
  14. module.exports = {
  15. mode: 'development',
  16. watch: true,
  17. output: {
  18. filename: '[name].js',
  19. path: path.resolve(__dirname, 'demo/dist'),
  20. publicPath: 'dist/',
  21. },
  22. entry: {
  23. 'demo': './demo/demo.js',
  24. 'demo.css': './demo/demo.scss',
  25. },
  26. resolve: {
  27. extensions: ['.js', '.ts', '.scss', '.svg', '.png'],
  28. },
  29. module: {
  30. rules: [
  31. {
  32. test: /\.scss$/,
  33. include: [path.resolve(__dirname, 'demo')],
  34. use: [
  35. MiniCssExtractPlugin.loader,
  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 CleanWebpackPlugin(['./demo/dist']),
  109. new MiniCssExtractPlugin({
  110. filename: '[name]',
  111. }),
  112. new webpack.DefinePlugin({
  113. VDITOR_VERSION: JSON.stringify(pkg.version),
  114. }),
  115. new WebpackOnBuildPlugin(() => {
  116. fs.unlinkSync('./demo/dist/demo.css.js')
  117. }),
  118. ],
  119. }