const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const UpdateVersionPlugin = require('./updateVersionPlugin');
//const ChangeScriptSourcePlugin = require('./changeScriptSourcePlugin');
const CopyPlugin = require('copy-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CSVLoader = require("./i18n_csv_loader");
module.exports = {
entry: path.resolve(__dirname, 'js/main.js'),
output: {
path: path.resolve(__dirname, 'build',"js"),
filename: '[name].[contenthash].js',
library: 'ivprogCore',
libraryTarget: 'umd'
},
node: {
fs: 'empty',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
},
{
test: /\.g4$/,
exclude: /(node_modules)/,
use: {
loader:'antlr4-webpack-loader'
}
},
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /\.csv$/,
use: [
{
loader: path.resolve(__dirname, 'i18n_csv_loader')
}
],
exclude: /node_modules/
}
]
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ]
},
stats: {
colors: true
},
plugins: [
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns:[path.resolve(__dirname, 'build/**/*')],
watch: true
}),
new UpdateVersionPlugin(),
new HtmlWebpackPlugin({
template: 'templates/index.html',
filename: path.resolve(__dirname, 'build', 'index.html')
}),
new HtmlWebpackPlugin({
template: 'templates/runner.html',
filename: path.resolve(__dirname, 'build', 'runner.html')
}),
/*new ChangeScriptSourcePlugin(),*/
new CopyPlugin([
{from:'js/iassign-integration-functions.js', to:path.resolve(__dirname, 'build/js')},
{from:"css/ivprog-visual-1.0.css", to:path.resolve(__dirname, 'build/css')},
{from:"css/ivprog-term.css", to:path.resolve(__dirname, 'build/css')},
{from:"css/ivprog-assessment.css", to:path.resolve(__dirname, 'build/css')},
{from:"css/ivprog-editor.css", to:path.resolve(__dirname, 'build/css')},
{from:"css/roboto.css", to:path.resolve(__dirname, 'build/css')},
{from:"css/fonts/", to:path.resolve(__dirname, 'build/css/fonts')},
{from:'js/Sortable.js', to:path.resolve(__dirname, 'build/js')},
{from: 'img/trash-icon.png', to:path.resolve(__dirname, 'build/img')},
{from: 'img/empty.svg', to:path.resolve(__dirname, 'build/img')},
{from:'js/jquery.json-editor.min.js', to:path.resolve(__dirname, 'build/js')},
{from:'node_modules/codemirror/lib/codemirror.css', to:path.resolve(__dirname, 'build/css')},
{from:'node_modules/codemirror/addon/hint/show-hint.css', to:path.resolve(__dirname, 'build/css')},
{from:'node_modules/codemirror/theme/ttcn.css', to:path.resolve(__dirname, 'build/css')},
/*{from:'index.html', to:path.resolve(__dirname, 'build')},
{from:'runner.html', to:path.resolve(__dirname, 'build')},*/
])
],
optimization: {
splitChunks: {
chunks: 'all'
}
},
devtool: 'source-map',
watchOptions: {
ignored: [
path.resolve(__dirname, '.ima_version.json'),
]
}
};