Files
karma/webpack.config.js
Łukasz Mierzwa 404cc47f5f Enable source map generation in webpack
JS files are minified, enabling source map generation will help with debugging. Sentry can also use source maps for better exceptions.
2017-08-08 11:22:30 -07:00

126 lines
4.1 KiB
JavaScript

const webpack = require("webpack");
const path = require("path");
const fs = require("fs");
const CleanWebpackPlugin = require("clean-webpack-plugin");
var config = {
cache: true,
context: path.resolve(__dirname, "assets/static"),
devtool: "cheap-source-map",
entry: {
unsee: "./unsee.js",
help: "./help.js"
},
output: {
path: path.resolve(__dirname, "assets/static/dist"),
publicPath: "static/dist/",
filename: "[name].[chunkhash].js"
},
plugins: [
new webpack.PrefetchPlugin(path.join(__dirname, "assets/static/unsee.js")),
new webpack.PrefetchPlugin(path.join(__dirname, "assets/static/help.js")),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
}),
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new CleanWebpackPlugin([ "assets/static/dist" ]),
new webpack.optimize.CommonsChunkPlugin({
name: "shared"
}),
// this will generate loader_${name}.html files that will have
// a <script/> line for loading hashed chunk
// inspited by https://github.com/webpack/webpack/issues/86
function() {
this.plugin("done", function(statsData) {
var stats = statsData.toJson();
if (!stats.errors.length) {
fs.mkdirSync(path.join(__dirname, "assets/static/dist/templates"));
for (var chunkName in stats.assetsByChunkName) {
var loaderName = "loader_" + chunkName + ".html";
var loaderScript = "<script type='text/javascript' src='static/dist/" + stats.assetsByChunkName[chunkName][0] + "'></script>";
fs.writeFileSync(path.join(__dirname, "assets/static/dist/templates", loaderName), loaderScript);
}
}
});
}
],
externals: {
"window":"window"
},
resolve: {
alias: {
"./bootstrap/less/variables.less": path.resolve(__dirname + "/node_modules/bootswatch/flatly/variables.less")
}
},
module: {
rules: [
{
test: require.resolve("jquery"),
use: "expose-loader?$!expose-loader?jQuery"
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: "url-loader?limit=10000&mimetype=application/font-woff"
},
{
test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: "file-loader"
},
{
test: /\.ico$/,
loader: "file-loader?name=[name].[ext]"
},
{
test: /\.css$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" }
]
},
{
test: /\.scss$/,
use: "style-loader"
},
{
test: /\.less$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" },
{ loader: "less-loader" }
]
},
{
test: /\.js$/,
include: path.resolve(__dirname, "assets/static"),
use: [ {
loader: "babel-loader",
options: {
cacheDirectory: true,
presets: [
[ "es2015", { modules: false } ]
]
}
} ]
}
]
},
}
// check what NODE_ENV is set, if it's empty we assume production
const isDev = (process.env.NODE_ENV === "test");
// enable production only plugins
if (!isDev) {
config.plugins.push(new webpack.optimize.UglifyJsPlugin());
config.plugins.push(new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false,
options: {
context: __dirname
}
}));
}
module.exports = config