webpack.config.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. },
  32. plugins: [
  33. // new CircularDependencyPlugin({
  34. // include: [ path.resolve(__dirname, 'build/src/') ],
  35. // failOnError: false,
  36. // cwd: process.cwd(),
  37. // }),
  38. new ExtraWatchWebpackPlugin({
  39. files: [
  40. './build/src/**/*.vert',
  41. './build/src/**/*.frag',
  42. './build/src/**/*.glsl',
  43. './build/src/**/*.scss',
  44. './build/src/**/*.html'
  45. ],
  46. }),
  47. new MiniCssExtractPlugin({ filename: 'app.css' })
  48. ],
  49. resolve: {
  50. modules: [
  51. 'node_modules',
  52. path.resolve(__dirname, 'build/src/')
  53. ],
  54. }
  55. }
  56. function createEntryPoint(name, dir, out) {
  57. return {
  58. entry: path.resolve(__dirname, `build/src/${dir}/${name}.js`),
  59. output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
  60. ...sharedConfig
  61. }
  62. }
  63. function createApp(name) { return createEntryPoint('index', `apps/${name}`, name) }
  64. function createBrowserTest(name) { return createEntryPoint(name, 'tests/browser', 'tests') }
  65. module.exports = [
  66. createApp('viewer'),
  67. createApp('model-server-query'),
  68. createBrowserTest('font-atlas'),
  69. createBrowserTest('render-text'),
  70. createBrowserTest('render-shape'),
  71. createBrowserTest('render-spheres'),
  72. createBrowserTest('render-mesh')
  73. ]