Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. const Webpack = require("webpack");
  2. const Glob = require("glob");
  3. const CopyWebpackPlugin = require("copy-webpack-plugin");
  4. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
  5. const ManifestPlugin = require("webpack-manifest-plugin");
  6. const CleanObsoleteChunks = require('webpack-clean-obsolete-chunks');
  7. const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
  8. const LiveReloadPlugin = require('webpack-livereload-plugin');
  9.  
  10. const configurator = {
  11. entries: function(){
  12. var entries = {
  13. application: [
  14. './node_modules/jquery-ujs/src/rails.js',
  15. './assets/css/application.scss',
  16. ],
  17. }
  18.  
  19. Glob.sync("./assets/*/*.*").forEach((entry) => {
  20. if (entry === './assets/css/application.scss') {
  21. return
  22. }
  23.  
  24. let key = entry.replace(/(./assets/(src|js|css|go)/)|.(ts|js|s[ac]ss|go)/g, '')
  25. if(key.startsWith("_") || (/(ts|js|s[ac]ss|go)$/i).test(entry) == false) {
  26. return
  27. }
  28.  
  29. if( entries[key] == null) {
  30. entries[key] = [entry]
  31. return
  32. }
  33.  
  34. entries[key].push(entry)
  35. })
  36. return entries
  37. },
  38.  
  39. plugins() {
  40. var plugins = [
  41. new CleanObsoleteChunks(),
  42. new Webpack.ProvidePlugin({$: "jquery",jQuery: "jquery"}),
  43. new MiniCssExtractPlugin({filename: "[name].[contenthash].css"}),
  44. new CopyWebpackPlugin([{from: "./assets",to: ""}], {copyUnmodified: true,ignore: ["css/**", "js/**", "src/**"] }),
  45. new Webpack.LoaderOptionsPlugin({minimize: true,debug: false}),
  46. new ManifestPlugin({fileName: "manifest.json"})
  47. ];
  48.  
  49. return plugins
  50. },
  51.  
  52. moduleOptions: function() {
  53. return {
  54. rules: [
  55. {
  56. test: /.s[ac]ss$/,
  57. use: [
  58. MiniCssExtractPlugin.loader,
  59. { loader: "css-loader", options: {sourceMap: true}},
  60. { loader: "sass-loader", options: {sourceMap: true}}
  61. ]
  62. },
  63. { test: /.tsx?$/, use: "ts-loader", exclude: /node_modules/},
  64. { test: /.jsx?$/,loader: "babel-loader",exclude: /node_modules/ },
  65. { test: /.(woff|woff2|ttf|svg)(?v=d+.d+.d+)?$/,use: "url-loader"},
  66. { test: /.eot(?v=d+.d+.d+)?$/,use: "file-loader" },
  67. { test: require.resolve("jquery"),use: "expose-loader?jQuery!expose-loader?$"},
  68. { test: /.go$/, use: "gopherjs-loader"}
  69. ]
  70. }
  71. },
  72.  
  73. buildConfig: function(){
  74. // NOTE: If you are having issues with this not being set "properly", make
  75. // sure your GO_ENV is set properly as `buffalo build` overrides NODE_ENV
  76. // with whatever GO_ENV is set to or "development".
  77. const env = process.env.NODE_ENV || "development";
  78.  
  79. var config = {
  80. mode: env,
  81. entry: configurator.entries(),
  82. output: {filename: "[name].[hash].js", path: `${__dirname}/public/assets`},
  83. plugins: configurator.plugins(),
  84. module: configurator.moduleOptions(),
  85. resolve: {
  86. extensions: ['.ts', '.js', '.json']
  87. }
  88. }
  89.  
  90. if( env === "development" ){
  91. config.plugins.push(new LiveReloadPlugin({appendScriptTag: true}))
  92. return config
  93. }
  94.  
  95. const uglifier = new UglifyJsPlugin({
  96. uglifyOptions: {
  97. beautify: false,
  98. mangle: {keep_fnames: true},
  99. output: {comments: false},
  100. compress: {}
  101. }
  102. })
  103.  
  104. config.optimization = {
  105. minimizer: [uglifier]
  106. }
  107.  
  108. return config
  109. }
  110. }
  111.  
  112. module.exports = configurator.buildConfig()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement