webpack.config.js
author Alexandre Segura <mex.zktk@gmail.com>
Mon, 06 Feb 2017 11:18:02 +0100
changeset 309 c5b524696fb3
parent 299 src_js/iconolab-bundle/webpack.config.js@fb07469bfb55
child 316 ffa87fe82904
permissions -rw-r--r--
Improve JS/CSS compilation. - Move config files to project root. - Output only one JS file & one CSS file containing all assets. - Stop copying Bootstrap assets by hand. - Introduce Sass for stylesheets. - Configure Webpack dev server for page reload. - Move all JS to the bottom of the page in layout.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
     1
var path = require('path')
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
     2
var webpack = require('webpack')
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
     3
var ExtractTextPlugin = require("extract-text-webpack-plugin")
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
     4
var projectRoot = path.resolve(__dirname, 'src_js/iconolab-bundle')
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
     5
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
     6
module.exports = {
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
     7
  entry: {
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
     8
    iconolab: [
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
     9
      './src_js/iconolab-bundle/src/main.js',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    10
      './src_js/iconolab-bundle/src/main.scss',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    11
    ]
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    12
  },
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    13
  output: {
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    14
    path: __dirname + '/src/iconolab/static',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    15
    publicPath: '/static/',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    16
    filename: 'iconolab/js/[name].js'
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    17
  },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    18
  module: {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    19
    loaders: [
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    20
      {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    21
        test: /\.vue$/,
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    22
        loader: 'vue'
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    23
      },
299
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    24
      {
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    25
        test: /\.css$/,
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    26
        loader: ExtractTextPlugin.extract("style-loader", "css-loader?modules&localIdentName=[local]"),
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    27
        include: [
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    28
          __dirname + '/src_js/iconolab-bundle/src',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    29
          /node_modules/
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    30
        ]
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    31
      },
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    32
      {
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    33
        test: /\.scss$/,
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    34
        loader: ExtractTextPlugin.extract("style-loader", "css-loader?modules&importLoaders=1&localIdentName=[local]!resolve-url-loader!sass-loader"),
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    35
        include: [
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    36
          __dirname + '/src_js/iconolab-bundle/src',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    37
          /node_modules/
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    38
        ]
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    39
      },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    40
      {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    41
        test: /\.js$/,
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    42
        loader: 'babel-loader',
299
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    43
        exclude: /node_modules/,
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    44
        include: [
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    45
          path.join(projectRoot, 'src')
fb07469bfb55 correct js compilation
ymh <ymh.work@gmail.com>
parents: 205
diff changeset
    46
        ],
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    47
        query: {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    48
          presets: ['es2015']
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    49
        },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    50
        "plugins": ["transform-es2015-shorthand-properties"]
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    51
      },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    52
      {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    53
        test: /\.(png|jpg|gif|svg)$/,
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    54
        loader: 'file',
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    55
        query: {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    56
          name: '[name].[ext]?[hash]'
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    57
        }
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    58
      },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    59
      {
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    60
        test: /\.(ttf|eot|svg|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    61
        loader: 'file-loader?name=iconolab/fonts/[name].[ext]'
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    62
      },
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    63
      {
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    64
        test: require.resolve('snapsvg'),
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    65
        loader: 'imports-loader?this=>window,fix=>module.exports=0'
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    66
      },
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    67
    ]
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    68
  },
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    69
  plugins: [
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    70
    new ExtractTextPlugin("iconolab/css/[name].css"),
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    71
    new webpack.ProvidePlugin({
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    72
      $: "jquery",
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    73
      jQuery: "jquery"
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    74
    })
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    75
  ],
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    76
  devServer: {
309
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    77
    port: 8001,
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    78
    contentBase: __dirname + '/src/iconolab',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    79
    publicPath: '/static/',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    80
    stats: 'minimal',
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    81
    compress: true,
c5b524696fb3 Improve JS/CSS compilation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 299
diff changeset
    82
    headers: { 'Access-Control-Allow-Origin': '*' },
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    83
    historyApiFallback: true,
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    84
  },
205
24e4aba394bf cleared incompatibility with older versions of Firefox and bug on Chrome for the fragment editor #35
durandn
parents: 151
diff changeset
    85
  devtool: '#source-map'
146
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    86
}
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    87
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    88
if (process.env.NODE_ENV === 'production') {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    89
  module.exports.devtool = '#source-map'
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    90
  // http://vue-loader.vuejs.org/en/workflow/production.html
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    91
  module.exports.plugins = (module.exports.plugins || []).concat([
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    92
    new webpack.DefinePlugin({
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    93
      'process.env': {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    94
        NODE_ENV: '"production"'
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    95
      }
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    96
    }),
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    97
    new webpack.optimize.UglifyJsPlugin({
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    98
      compress: {
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
    99
        warnings: false
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
   100
      }
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
   101
    }),
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
   102
    new webpack.optimize.OccurenceOrderPlugin()
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
   103
  ])
f912b591e1c1 new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff changeset
   104
}