webpack.config.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. const path = require('path');
  2. const glob = require('glob');
  3. // Minify JS
  4. const MinifyPlugin = require('babel-minify-webpack-plugin');
  5. // This plugin extracts the CSS into its own file instead of tying it with the JS.
  6. // It prevents:
  7. // - not having styles due to a JS error
  8. // - the flash page without styles during JS loading
  9. const ExtractTextPlugin = require("extract-text-webpack-plugin");
  10. const extractCssDefault = new ExtractTextPlugin({
  11. filename: "../css/[name].min.css",
  12. publicPath: 'tpl/default/css/',
  13. });
  14. const extractCssVintage = new ExtractTextPlugin({
  15. filename: "../css/[name].min.css",
  16. publicPath: 'tpl/vintage/css/',
  17. });
  18. module.exports = [
  19. {
  20. entry: {
  21. thumbnails: './assets/common/js/thumbnails.js',
  22. thumbnails_update: './assets/common/js/thumbnails-update.js',
  23. pluginsadmin: './assets/default/js/plugins-admin.js',
  24. shaarli: [
  25. './assets/default/js/base.js',
  26. './assets/default/scss/shaarli.scss',
  27. ].concat(glob.sync('./assets/default/img/*')),
  28. },
  29. output: {
  30. filename: '[name].min.js',
  31. path: path.resolve(__dirname, 'tpl/default/js/')
  32. },
  33. module: {
  34. rules: [
  35. {
  36. test: /\.js$/,
  37. exclude: /node_modules/,
  38. use: {
  39. loader: 'babel-loader',
  40. options: {
  41. presets: [
  42. 'babel-preset-env',
  43. ]
  44. }
  45. }
  46. },
  47. {
  48. test: /\.scss/,
  49. use: extractCssDefault.extract({
  50. use: [{
  51. loader: "css-loader",
  52. options: {
  53. minimize: true,
  54. }
  55. }, {
  56. loader: "sass-loader"
  57. }],
  58. })
  59. },
  60. {
  61. test: /\.(gif|png|jpe?g|svg|ico)$/i,
  62. use: [
  63. {
  64. loader: 'file-loader',
  65. options: {
  66. name: '../img/[name].[ext]',
  67. publicPath: 'tpl/default/img/',
  68. }
  69. }
  70. ],
  71. },
  72. {
  73. test: /\.(eot|ttf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
  74. loader: 'file-loader',
  75. options: {
  76. name: '../fonts/[name].[ext]',
  77. // do not add a publicPath here because it's already handled by CSS's publicPath
  78. publicPath: '',
  79. }
  80. },
  81. ],
  82. },
  83. plugins: [
  84. new MinifyPlugin(),
  85. extractCssDefault,
  86. ],
  87. },
  88. {
  89. entry: {
  90. shaarli: [
  91. './assets/vintage/js/base.js',
  92. './assets/vintage/css/reset.css',
  93. './assets/vintage/css/shaarli.css',
  94. ].concat(glob.sync('./assets/vintage/img/*')),
  95. thumbnails: './assets/common/js/thumbnails.js',
  96. thumbnails_update: './assets/common/js/thumbnails-update.js',
  97. },
  98. output: {
  99. filename: '[name].min.js',
  100. path: path.resolve(__dirname, 'tpl/vintage/js/')
  101. },
  102. module: {
  103. rules: [
  104. {
  105. test: /\.js$/,
  106. exclude: /node_modules/,
  107. use: {
  108. loader: 'babel-loader',
  109. options: {
  110. presets: [
  111. 'babel-preset-env',
  112. ]
  113. }
  114. }
  115. },
  116. {
  117. test: /\.css$/,
  118. use: extractCssVintage.extract({
  119. use: [{
  120. loader: "css-loader",
  121. options: {
  122. minimize: true,
  123. }
  124. }],
  125. })
  126. },
  127. {
  128. test: /\.(gif|png|jpe?g|svg|ico)$/i,
  129. use: [
  130. {
  131. loader: 'file-loader',
  132. options: {
  133. name: '../img/[name].[ext]',
  134. publicPath: '',
  135. }
  136. }
  137. ],
  138. },
  139. ],
  140. },
  141. plugins: [
  142. new MinifyPlugin(),
  143. extractCssVintage,
  144. ],
  145. },
  146. ];