webpack.config.js 3.3 KB

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