Guest User

Untitled

a guest
Dec 17th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. const ExtractTextPlugin = require("extract-text-webpack-plugin");
  2. const fs = require('fs');
  3. const CleanWebpackPlugin = require('clean-webpack-plugin');
  4. const webpack = require('webpack');
  5. const path = require('path');
  6. const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
  7. const ZipPlugin = require('zip-webpack-plugin');
  8. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  9. const prod = process.argv.indexOf('-p') !== -1;
  10.  
  11. const paths = {
  12. output: path.resolve(__dirname, 'dist'),
  13. input: path.resolve(__dirname, 'app')
  14. };
  15.  
  16. const templates = (directory) => {
  17.  
  18. let templates = fs.readdirSync(paths.input + directory).filter(function (file) {
  19. return file.match(/.*\.pug$/);
  20. });
  21.  
  22. for (index in templates) {
  23. templates[index] = paths.input + directory + templates[index]
  24. }
  25.  
  26. return templates;
  27. }
  28.  
  29. const plugins = {
  30. etp: new ExtractTextPlugin('css/app.bundle.css'),
  31. cwp: new CleanWebpackPlugin(paths.output, {
  32. root: '',
  33. verbose: true,
  34. dry: false
  35. }),
  36. bsp: new BrowserSyncPlugin({
  37. host: 'webpack',
  38. port: 3000,
  39. server: {
  40. baseDir: ['dist']
  41. }
  42. }),
  43. zip: new ZipPlugin({
  44. path: '',
  45. filename: 'upload.zip'
  46. }),
  47. uglify: new webpack.optimize.UglifyJsPlugin({ comments: false })
  48.  
  49. }
  50.  
  51.  
  52. const config = ({
  53. entry: [
  54. paths.input + '/javascript/app.js',
  55. paths.input + '/sass/main.sass',
  56. ...templates('/pug/')
  57. ],
  58.  
  59. output: {
  60. path: paths.output,
  61. pathinfo: true,
  62. filename: './js/app.bundle.js',
  63. },
  64.  
  65. module: {
  66. rules: [{
  67. test: /\.js$/,
  68. exclude: /(node_modules|bower_components)/,
  69. use: [{
  70. loader: 'babel-loader',
  71. options: {
  72. presets: ['@babel/preset-env']
  73. }
  74. }]
  75. }, {
  76. test: /\.pug$/,
  77. use: [{
  78. loader: 'file-loader?name=[name].html'
  79. }, {
  80. loader: 'pug-html-loader',
  81. options: {
  82. pretty: (prod ? false : true)
  83. }
  84. }]
  85. }, {
  86. test: /\.sass$/,
  87.  
  88. use: ExtractTextPlugin.extract({
  89. fallback: 'style-loader',
  90. use: [{
  91. loader: 'css-loader',
  92.  
  93. }, {
  94. loader: 'postcss-loader',
  95. options: {
  96. config: {
  97. path: './configs/postcss.config.js'
  98. }
  99. }
  100. }, {
  101. loader: 'sass-loader'
  102. }]
  103. })
  104. }, {
  105. test: /.(jpg|png|gif)$/,
  106. loader: 'file-loader',
  107. options: {
  108. publicPath: '/',
  109. outputPath: 'images/',
  110. name: '[name]-[hash:6].[ext]'
  111. }
  112. }]
  113. },
  114. plugins: [plugins.etp, plugins.cwp]
  115.  
  116. });
  117.  
  118. prod && config.plugins.push(plugins.zip);
  119. prod && config.plugins.push(plugins.uglify);
  120. !prod && config.plugins.push(plugins.bsp);
  121.  
  122.  
  123.  
  124. module.exports = config;
Add Comment
Please, Sign In to add comment