mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
JS files are minified, enabling source map generation will help with debugging. Sentry can also use source maps for better exceptions.
126 lines
4.1 KiB
JavaScript
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
|