const gulp = require('gulp'); const nodemon = require('nodemon'); const path = require('path'); const webpack = require('webpack'); const fs = require('fs'); const nodeExternals = require('webpack-node-externals'); const config = { target: 'node', entry: [path.join(__dirname, '/src/ts/server.ts')], output: { path: path.join(__dirname, '/server'), filename: 'server.js', }, devtool: 'source-map', resolve: { modules: [path.join(__dirname, '/src/ts'), 'node_modules'], extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'], alias: { ts: path.join(__dirname, '/src/ts'), contract_artifacts: path.join(__dirname, '/src/contract_artifacts'), }, }, module: { rules: [ { test: /\.js$/, loader: 'source-map-loader', }, { test: /\.tsx?$/, loader: 'awesome-typescript-loader', }, ], }, plugins: [ new webpack.BannerPlugin({ banner: 'require("source-map-support").install();', raw: true, entryOnly: false, }), ], externals: nodeExternals({ modulesDir: path.join(__dirname, '../../node_modules'), }), watchOptions: { ignored: /server|node_modules|transpiled/, }, }; gulp.task('build', function(done) { webpack(config).run(onBuild(done)); }); gulp.task('watch', function() { webpack(config).watch(100, function(err, stats) { onBuild()(err, stats); nodemon.restart(); }); }); gulp.task('run', ['watch'], function() { nodemon({ execMap: { js: 'node', }, script: path.join(__dirname, 'server/server'), ignore: ['*'], watch: ['foo/'], ext: 'noop', }).on('restart', function() { console.log('Restarted!'); }); }); function onBuild(done) { return function(err, stats) { if (err) { console.log('Error', err); process.exit(1); } else { console.log(stats.toString()); } if (done) { if (stats.compilation.errors && stats.compilation.errors.length > 0) { process.exit(1); } done(); } }; }