webpack.config.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const path = require('path');
  2. const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin');
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  4. // const CircularDependencyPlugin = require('circular-dependency-plugin');
  5. const sharedConfig = {
  6. module: {
  7. rules: [
  8. {
  9. loader: 'raw-loader',
  10. test: /\.(glsl|frag|vert)$/,
  11. include: [path.resolve(__dirname, 'build/src/')],
  12. },
  13. {
  14. loader: 'glslify-loader',
  15. test: /\.(glsl|frag|vert)$/,
  16. include: [path.resolve(__dirname, 'build/src/')]
  17. },
  18. {
  19. loader: 'file-loader',
  20. test: /\.(woff2?|ttf|otf|eot|svg|html)$/,
  21. include: [path.resolve(__dirname, 'build/src/')],
  22. options: {
  23. name: '[name].[ext]'
  24. }
  25. },
  26. {
  27. test: /\.(s*)css$/,
  28. use: [MiniCssExtractPlugin.loader, 'css-loader', 'resolve-url-loader', 'sass-loader']
  29. },
  30. {
  31. test: /version\.js$/,
  32. loader: 'string-replace-loader',
  33. options: {
  34. search: '$PLUGIN_VERSION_DATE$',
  35. replace: function (date) { return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate() } (new Date()),
  36. }
  37. }
  38. ]
  39. },
  40. plugins: [
  41. // new CircularDependencyPlugin({
  42. // include: [ path.resolve(__dirname, 'build/src/') ],
  43. // failOnError: false,
  44. // cwd: process.cwd(),
  45. // }),
  46. new ExtraWatchWebpackPlugin({
  47. files: [
  48. './build/src/**/*.vert',
  49. './build/src/**/*.frag',
  50. './build/src/**/*.glsl',
  51. './build/src/**/*.scss',
  52. './build/src/**/*.html'
  53. ],
  54. }),
  55. new MiniCssExtractPlugin({ filename: 'app.css' })
  56. ],
  57. resolve: {
  58. modules: [
  59. 'node_modules',
  60. path.resolve(__dirname, 'build/src/')
  61. ],
  62. }
  63. }
  64. function createEntryPoint(name, dir, out) {
  65. return {
  66. entry: path.resolve(__dirname, `build/src/${dir}/${name}.js`),
  67. output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
  68. ...sharedConfig
  69. }
  70. }
  71. function createNodeEntryPoint(name, dir, out) {
  72. return {
  73. target: 'node',
  74. entry: path.resolve(__dirname, `build/src/${dir}/${name}.js`),
  75. output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
  76. ...sharedConfig
  77. }
  78. }
  79. function createApp(name) { return createEntryPoint('index', `apps/${name}`, name) }
  80. function createBrowserTest(name) { return createEntryPoint(name, 'tests/browser', 'tests') }
  81. function createNodeApp(name) { return createNodeEntryPoint('index', `apps/${name}`, name) }
  82. module.exports = [
  83. createApp('viewer'),
  84. createApp('basic-wrapper'),
  85. createNodeApp('state-docs'),
  86. createApp('model-server-query'),
  87. createBrowserTest('font-atlas'),
  88. createBrowserTest('render-text'),
  89. createBrowserTest('render-shape'),
  90. createBrowserTest('render-spheres'),
  91. createBrowserTest('render-mesh')
  92. ]