'use strict' const path = require("path"); const extractTextPlugin = require('extract-text-webpack-plugin'); const postcssImport = require('postcss-import'); const autoprefixer = require('autoprefixer'); function resolve (dir) { return path.join(__dirname, '..', dir); } function cssLoaders (type) { var postcssLoader = { loader:'postcss-loader', options:{ plugins:[postcssImport,autoprefixer], browser:['last 5 versions'] } }; if(process.env.NODE_ENV === 'development'){ var loaders = ['style-loader','css-loader',postcssLoader]; if(type && type == 'sass'){ loaders.push("sass-loader"); } return loaders; } else{ var loaders = { fallback: 'style-loader', use: ['css-loader',postcssLoader, 'sass-loader'] }; if(type && type == 'sass'){ loaders.use.push("sass-loader"); } return extractTextPlugin.extract(loaders); } } module.exports = { entry: { app:'./client/index.js', common:['./client/common.js'] }, output: { path: resolve('./dist'), filename:'js/[name]-[hash].js', publicPath:'' }, // devServer:{ // historyApiFallback: true, // contentBase: './', // hot:true // }, resolve: { extensions: ['.js', '.jsx', '.json'], alias: { '@': resolve('client'), } }, module:{ rules:[ { test:/\.js[x]?$/, loader:['babel-loader'], exclude:resolve('node_modules/') }, { test:/\.html$/, loader:'html-loader' }, { test:/\.json$/, loader:'json-loader' }, { test:/\.css$/, use: cssLoaders() }, { test:/\.scss$/, use: cssLoaders('sass') }, { test:/\.(jpg|png|jpeg|gif)$/, loaders:[ { loader:'url-loader', options:{ limit:1000, name:'assets/[name]-[hash:5].[ext]' } }, 'image-webpack-loader' ] }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: 'fonts/[name].[hash:7].[ext]' } } ] } }