UNPKG

noll

Version:

An environment for computer graphics experiments

103 lines (87 loc) 2.82 kB
/* eslint-disable no-var, vars-on-top, no-console, prefer-arrow-callback, indent, object-shorthand, global-require, func-names, quotes */ var webpack = require('webpack'); var WebpackDevServer = require('webpack-dev-server'); var path = require('path'); var fs = require('fs'); var chokidar = require('chokidar'); var deepEqual = require('deep-equal'); var log = require('../src/utils/log'); var getExperiments = require('../src/utils/getExperiments'); var createConfig = require('../src/utils/createConfig'); var createEntry = require('../src/utils/createEntry'); var createLoader = require('../src/utils/createLoader'); var openBrowser = require('../src/utils/openBrowser'); var cwd = process.cwd(); var experiments = getExperiments(cwd); function writeLoader(exp) { var loader = createLoader(exp); fs.writeFileSync(path.resolve(__dirname, '../entry/loader.js'), loader); } function writeEntry() { var entry = createEntry(); fs.writeFileSync(path.resolve(__dirname, '../entry/index.js'), entry); } function handleChanged() { var experimentsNext = getExperiments(cwd); if (!deepEqual(experimentsNext, experiments)) { experiments = experimentsNext; log.yellow('Updating loader...'); writeLoader(experiments); } } var watcher = chokidar.watch('**/*.*', { cwd: cwd, ignored: /node_modules/, ignoreInitial: true }); watcher .on('add', handleChanged) .on('change', handleChanged) .on('unlink', handleChanged); writeLoader(experiments); writeEntry(); var config = createConfig(cwd); var compiler = webpack(config); compiler.plugin('invalid', function () { log.yellow('Compiling...'); }); compiler.plugin('done', function (stats) { var hasErrors = stats.hasErrors(); var hasWarnings = stats.hasWarnings(); if (!hasErrors && !hasWarnings) { log.green('Compiled successfully!'); return; } var json = stats.toJson(); if (hasErrors) { log.red('Failed to compile.'); json.errors.forEach(function (message) { console.log(message); }); return; } if (hasWarnings) { log.yellow('Compiled with warnings.'); json.warnings.forEach(function (message) { console.log(message); }); } }); new WebpackDevServer(compiler, { contentBase: path.resolve(__dirname, '../entry'), publicPath: config.output.publicPath, hot: true, historyApiFallback: true, quiet: true, watchOptions: { ignored: /node_modules/ } }).listen(3000, 'localhost', function (err) { if (err) { console.log(err); return; } log.cyan('Starting the development server...'); log.white('The app will be running at http://localhost:3000/'); openBrowser('http://localhost:3000/'); });