Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

webpack.config.js 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const path = require('path');
  2. const webpack = require('webpack');
  3. const TerserPlugin = require('terser-webpack-plugin');
  4. const pack = require('./package.json');
  5. module.exports = (env, argv) => ({
  6. entry: './src/main.ts',
  7. mode: argv.mode == 'development' ? 'development' : 'production',
  8. devtool: argv.mode == 'development' ? 'source-map' : undefined,
  9. output: {
  10. filename: !env.minimize ? 'encantar.js' : 'encantar.min.js',
  11. path: path.resolve(__dirname, 'dist'),
  12. publicPath: '/dist/',
  13. library: {
  14. name: 'AR',
  15. type: 'umd',
  16. export: 'default',
  17. },
  18. },
  19. resolve: {
  20. extensions: [ '.ts', '.js' ],
  21. symlinks: false,
  22. modules: [
  23. path.resolve(__dirname, 'src'),
  24. path.resolve(__dirname, '../node_modules'),
  25. 'node_modules',
  26. ],
  27. },
  28. plugins: [
  29. new webpack.BannerPlugin({
  30. banner: ((({ author, version, year, homepage, description, date }) => ([
  31. `encantar.js version ${version}`,
  32. `${description}`,
  33. `Copyright ${year} ${author}`,
  34. `${homepage}`,
  35. ``,
  36. `@license LGPL-3.0-or-later`,
  37. `Date: ${date}`,
  38. ].join('\n')))({
  39. ...pack,
  40. 'date': new Date().toISOString(),
  41. 'year': [2022, new Date().getFullYear()].join('-'),
  42. 'author': pack.author.replace('@', '(at)'),
  43. }))
  44. }),
  45. new webpack.DefinePlugin({
  46. '__AR_VERSION__': JSON.stringify(pack.version),
  47. '__AR_DEVELOPMENT_MODE__': argv.mode == 'development',
  48. '__AR_WEBSITE__': JSON.stringify(pack.homepage),
  49. }),
  50. new webpack.IgnorePlugin({
  51. resourceRegExp: /\.ignore\./i,
  52. }),
  53. ],
  54. module: {
  55. rules: [{
  56. test: /\.ts$/,
  57. include: path.resolve(__dirname, 'src'),
  58. exclude: /node_modules/,
  59. use: [{
  60. loader: 'ts-loader',
  61. options: {
  62. // improve the build time when using the dev server
  63. transpileOnly: env.PORT !== undefined,
  64. },
  65. }],
  66. }],
  67. },
  68. devServer: {
  69. server: 'https',
  70. host: env.HOST || '0.0.0.0',
  71. port: env.PORT || 8000,
  72. static: ['demos', 'plugins', 'tests'].map(dir => ({
  73. directory: path.resolve(__dirname, dir),
  74. publicPath: `/${dir}/`,
  75. })),
  76. //host: '0.0.0.0',
  77. //host: 'local-ip',
  78. },
  79. optimization: !env.minimize ? { minimize: false } : {
  80. minimize: true,
  81. minimizer: [new TerserPlugin({
  82. terserOptions: {
  83. format: {
  84. comments: /@license/i,
  85. },
  86. },
  87. extractComments: false,
  88. })],
  89. },
  90. });