@ -5,39 +5,118 @@ const common = require('./webpack.common.js');
const path = require ( 'path' ) ;
const webpack = require ( 'webpack' ) ;
const HtmlWebpackPlugin = require ( "html-webpack-plugin" ) ;
const HtmlWebpackHarddiskPlugin = require ( 'html-webpack-harddisk-plugin' ) ;
const ExtractTextPlugin = require ( "extract-text-webpack-plugin" ) ;
const WebpackCleanup Plugin = require ( 'webpack-cleanup -plugin' ) ;
const Clean WebpackPlugin = require ( 'clean- webpack-plugin' ) ;
const BundleAnalyzerPlugin = require ( 'webpack-bundle-analyzer' ) . BundleAnalyzerPlugin ;
module . exports = merge ( common , {
devtool : "cheap-module-source-map" ,
const TARGET = process . env . npm _lifecycle _event ;
const HOT = TARGET === 'start' ;
const extractSass = new ExtractTextPlugin ( {
filename : "grafana.[name].css" ,
disable : HOT
} ) ;
entry : {
const entries = HOT ? {
app : [
'webpack-dev-server/client?http://localhost:3333' ,
'./public/app/dev.ts' ,
] ,
vendor : require ( './dependencies' ) ,
} : {
app : './public/app/index.ts' ,
dark : './public/sass/grafana.dark.scss' ,
light : './public/sass/grafana.light.scss' ,
vendor : require ( './dependencies' ) ,
} ;
module . exports = merge ( common , {
devtool : "cheap-module-source-map" ,
entry : entries ,
resolve : {
extensions : [ '.scss' , '.ts' , '.tsx' , '.es6' , '.js' , '.json' , '.svg' , '.woff2' , '.png' ] ,
} ,
devServer : {
publicPath : '/public/build/' ,
hot : HOT ,
port : 3333 ,
proxy : {
'!/public/build' : 'http://localhost:3000'
}
} ,
module : {
rules : [
{
test : /\.tsx?$/ ,
enforce : 'pre' ,
exclude : /node_modules/ ,
use : {
loader : 'tslint-loader' ,
options : {
emitErrors : true ,
typeCheck : false ,
}
}
} ,
{
test : /\.tsx?$/ ,
exclude : /node_modules/ ,
use : [
{
loader : 'babel-loader' ,
options : {
plugins : [
'react-hot-loader/babel' ,
] ,
} ,
} ,
{
loader : 'awesome-typescript-loader' ,
options : {
useCache : true ,
} ,
}
]
} ,
require ( './sass.rule.js' ) ( {
sourceMap : false , minimize : false
} )
sourceMap : true , minimize : false , preserveUrl : true
} , extractSass ) ,
{
test : /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9=&.]+)?$/ ,
loader : 'file-loader'
} ,
{
test : /\.(png|jpg|gif)$/ ,
use : [
{
loader : 'file-loader' ,
options : { }
}
]
} ,
]
} ,
plugins : [
new ExtractTextPlugin ( { // define where to save the file
filename : 'grafana.[name].css' ,
allChunks : true ,
} ) ,
new CleanWebpackPlugin ( '../public/build' , { allowExternal : true } ) ,
extractSass ,
new HtmlWebpackPlugin ( {
filename : path . resolve ( _ _dirname , '../../public/views/index.html' ) ,
template : path . resolve ( _ _dirname , '../../public/views/index.template.html' ) ,
inject : 'body' ,
chunks : [ 'manifest' , 'vendor' , 'app' ] ,
alwaysWriteToDisk : HOT
} ) ,
new HtmlWebpackHarddiskPlugin ( ) ,
new webpack . NamedModulesPlugin ( ) ,
new webpack . HotModuleReplacementPlugin ( ) ,
new webpack . DefinePlugin ( {
'GRAFANA_THEME' : JSON . stringify ( process . env . GRAFANA _THEME || 'dark' ) ,
'process.env' : {
'NODE_ENV' : JSON . stringify ( 'development' )
}