webpack.config.common.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. test: /\.(woff2?|ttf|otf|eot|svg|html|ico)$/,
  11. use: [{
  12. loader: 'file-loader',
  13. options: { name: '[name].[ext]' }
  14. }]
  15. },
  16. {
  17. test: /\.(s*)css$/,
  18. use: [
  19. MiniCssExtractPlugin.loader,
  20. 'css-loader', 'resolve-url-loader', 'sass-loader'
  21. ]
  22. }
  23. ]
  24. },
  25. plugins: [
  26. // new CircularDependencyPlugin({
  27. // include: [ path.resolve(__dirname, 'lib/') ],
  28. // failOnError: false,
  29. // cwd: process.cwd(),
  30. // }),
  31. new ExtraWatchWebpackPlugin({
  32. files: [
  33. './lib/**/*.scss',
  34. './lib/**/*.html'
  35. ],
  36. }),
  37. new webpack.DefinePlugin({
  38. __PLUGIN_VERSION_TIMESTAMP__: webpack.DefinePlugin.runtimeValue(() => `${new Date().valueOf()}`, true),
  39. 'process.env.DEBUG': JSON.stringify(process.env.DEBUG)
  40. }),
  41. new MiniCssExtractPlugin({ filename: 'app.css' })
  42. ],
  43. resolve: {
  44. modules: [
  45. 'node_modules',
  46. path.resolve(__dirname, 'lib/')
  47. ],
  48. },
  49. devtool: ''
  50. }
  51. function createEntry(src, outFolder, outFilename, isNode) {
  52. return {
  53. node: isNode ? void 0 : { fs: 'empty' }, // TODO find better solution? Currently used in file-handle.ts
  54. target: isNode ? 'node' : void 0,
  55. entry: path.resolve(__dirname, `lib/${src}.js`),
  56. output: { filename: `${outFilename}.js`, path: path.resolve(__dirname, `build/${outFolder}`) },
  57. ...sharedConfig
  58. }
  59. }
  60. function createEntryPoint(name, dir, out) {
  61. return {
  62. node: { fs: 'empty' }, // TODO find better solution? Currently used in file-handle.ts
  63. entry: path.resolve(__dirname, `lib/${dir}/${name}.js`),
  64. output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
  65. ...sharedConfig
  66. }
  67. }
  68. function createNodeEntryPoint(name, dir, out) {
  69. return {
  70. target: 'node',
  71. entry: path.resolve(__dirname, `lib/${dir}/${name}.js`),
  72. output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
  73. externals: {
  74. argparse: 'require("argparse")',
  75. 'node-fetch': 'require("node-fetch")',
  76. 'util.promisify': 'require("util.promisify")',
  77. xhr2: 'require("xhr2")',
  78. },
  79. ...sharedConfig
  80. }
  81. }
  82. function createApp(name) { return createEntryPoint('index', `apps/${name}`, name) }
  83. function createBrowserTest(name) { return createEntryPoint(name, 'tests/browser', 'tests') }
  84. function createNodeApp(name) { return createNodeEntryPoint('index', `apps/${name}`, name) }
  85. module.exports = {
  86. createApp,
  87. createEntry,
  88. createBrowserTest,
  89. createNodeEntryPoint,
  90. createNodeApp
  91. }
  92. // module.exports = [
  93. // createApp('viewer'),
  94. // // createApp('basic-wrapper'),
  95. // // createEntry('examples/proteopedia-wrapper/index', 'examples/proteopedia-wrapper', 'index'),
  96. // // createEntry('apps/demos/lighting/index', 'demos/lighting', 'index'),
  97. // // createNodeApp('state-docs'),
  98. // // createNodeEntryPoint('preprocess', 'servers/model', 'model-server'),
  99. // // createApp('model-server-query'),
  100. // // createBrowserTest('font-atlas'),
  101. // // createBrowserTest('marching-cubes'),
  102. // // createBrowserTest('render-lines'),
  103. // // createBrowserTest('render-mesh'),
  104. // // createBrowserTest('render-shape'),
  105. // // createBrowserTest('render-spheres'),
  106. // // createBrowserTest('render-structure'),
  107. // // createBrowserTest('render-text'),
  108. // ]