diff --git a/.gitignore b/.gitignore index 041ffce5ad..8c806efd19 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,6 @@ webpack.records.json morgan.log +yarn-error.log + *.css diff --git a/package.json b/package.json index 3c54222457..78b477cfe2 100644 --- a/package.json +++ b/package.json @@ -35,20 +35,12 @@ "build:prod:json:rollup": "yarn run build:prod:json && yarn run rollup", "ngc": "ngc -p tsconfig.aot.json", "prestart": "yarn run build:prod:ngc:json", - "server": "node dist/server/build.js", + "server": "node dist/server/index.js", "server:dev": "node dist/server/index.js", "server:dev:watch": "nodemon --debug dist/server/index.js", "start": "yarn run server", "start:dev": "yarn run clean:prod && yarn run build && yarn run server:dev", "watch": "webpack -w & yarn run style:watch", - "watch:dev:server": "concurrently \"yarn run server:dev:watch\" \"yarn run watch\"", - "watch:dev": "yarn run clean:prod && yarn run build && yarn run watch:dev:server", - "watch:prod:server": "concurrently \"yarn run server\" \"yarn run watch\"", - "watch:prod": "yarn run build:prod:ngc:json && yarn run watch:prod:server", - "predebug": "yarn run build", - "start": "yarn run server", - "start:dev": "yarn run clean:prod && yarn run build && yarn run server:dev", - "watch": "webpack -w & yarn run style:watch", "watch:dev:server": "npm-run-all -p server:dev:watch watch", "watch:dev": "yarn run clean:prod && yarn run build && yarn run watch:dev:server", "watch:prod:server": "npm-run-all -p server watch", diff --git a/rollup-client.js b/rollup-client.js index 1e50d256aa..5b1d4f1aa8 100644 --- a/rollup-client.js +++ b/rollup-client.js @@ -1,18 +1,16 @@ -import rollup from 'rollup' +import rollup from 'rollup' import nodeResolve from 'rollup-plugin-node-resolve' -import commonjs from 'rollup-plugin-commonjs'; -import uglify from 'rollup-plugin-uglify' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' export default { - entry: 'dist/client/main.bundle.js', - dest: 'dist/client/build.js', - sourceMap: false, - format: 'iife', - plugins: [ - nodeResolve({jsnext: true, module: true}), - commonjs({ - include: 'node_modules/rxjs/**', - }), - uglify() - ] + entry : 'dist/client/main.bundle.js', + dest : 'dist/client/main.bundle.js', + sourceMap : false, + format : 'iife', + plugins : [ + nodeResolve({jsnext: true, module: true}), + commonjs({include: 'node_modules/rxjs/**'}), + uglify() + ] } diff --git a/rollup-server.js b/rollup-server.js index a7e1ae3ce8..c88b75a9c6 100644 --- a/rollup-server.js +++ b/rollup-server.js @@ -1,18 +1,16 @@ -import rollup from 'rollup' +import rollup from 'rollup' import nodeResolve from 'rollup-plugin-node-resolve' -import commonjs from 'rollup-plugin-commonjs'; -import uglify from 'rollup-plugin-uglify' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' export default { - entry: 'dist/server/index.js', - dest: 'dist/server/build.js', - sourceMap: false, - format: 'iife', - plugins: [ - nodeResolve({jsnext: true, module: true}), - commonjs({ - include: 'node_modules/rxjs/**', - }), - uglify() - ] + entry : 'dist/server/index.js', + dest : 'dist/server/index.js', + sourceMap : false, + format : 'iife', + plugins : [ + nodeResolve({jsnext: true, module: true}), + commonjs({include: 'node_modules/rxjs/**'}), + uglify() + ] } diff --git a/src/index-aot.html b/src/index-aot.html deleted file mode 100644 index 58d8ac39b3..0000000000 --- a/src/index-aot.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - DSpace - - - - - - - - - Loading DSpace ... - - - - - diff --git a/src/server.aot.ts b/src/server.aot.ts index e8c1e98a7d..b8d09218fc 100644 --- a/src/server.aot.ts +++ b/src/server.aot.ts @@ -43,11 +43,12 @@ app.engine('.html', createEngine({ ] })); app.set('port', process.env.PORT || 3000); +app.set('address', process.env.ADDRESS || '127.0.0.1'); app.set('views', __dirname); app.set('view engine', 'html'); app.set('json spaces', 2); -app.use(cookieParser('Angular 2 Universal')); +app.use(cookieParser('DSpace Universal')); app.use(bodyParser.json()); app.use(compression()); @@ -79,16 +80,27 @@ app.get('/data.json', serverApi); app.use('/api', createMockApi()); function ngApp(req, res) { - res.render('index-aot', { - req, - res, - // time: true, // use this to determine what part of your app is slow only in development - async: true, - preboot: true, - baseUrl: '/', - requestUrl: req.originalUrl, - originUrl: `http://localhost:${app.get('port')}` + + function onHandleError(parentZoneDelegate, currentZone, targetZone, error) { + console.warn('Error in SSR, serving for direct CSR', error); + res.sendFile('index.html', { root: './src' }); + return false; + } + + Zone.current.fork({ name: 'CSR fallback', onHandleError }).run(() => { + res.render('index', { + req, + res, + // use this to determine what part of your app is slow only in development + // time: true, + async: true, + preboot: true, + baseUrl: '/', + requestUrl: req.originalUrl, + originUrl: `http://${app.get('address')}:${app.get('port')}` + }); }); + } /** @@ -110,5 +122,5 @@ app.get('*', function(req, res) { // Server let server = app.listen(app.get('port'), () => { - console.log(`Listening on: http://localhost:${server.address().port}`); + console.log(`Listening on: http://${server.address().address}:${server.address().port}`); }); diff --git a/src/server.ts b/src/server.ts index 82e7fe0d8c..359aefce85 100644 --- a/src/server.ts +++ b/src/server.ts @@ -41,6 +41,7 @@ app.engine('.html', createEngine({ ] })); app.set('port', process.env.PORT || 3000); +app.set('address', process.env.ADDRESS || '127.0.0.1'); app.set('views', __dirname); app.set('view engine', 'html'); app.set('json spaces', 2); @@ -72,16 +73,26 @@ app.get('/data.json', serverApi); app.use('/api', createMockApi()); function ngApp(req, res) { - res.render('index', { - req, - res, - // time: true, // use this to determine what part of your app is slow only in development - async: true, - preboot: true, - baseUrl: '/', - requestUrl: req.originalUrl, - originUrl: `http://localhost:${app.get('port')}` + + function onHandleError(parentZoneDelegate, currentZone, targetZone, error) { + console.warn('Error in SSR, serving for direct CSR'); + res.sendFile('index.html', { root: './src' }); + return false; + } + + Zone.current.fork({ name: 'CSR fallback', onHandleError }).run(() => { + res.render('index', { + req, + res, + // time: true, // use this to determine what part of your app is slow only in development + async: true, + preboot: true, + baseUrl: '/', + requestUrl: req.originalUrl, + originUrl: `http://${app.get('address')}:${app.get('port')}` + }); }); + } /** @@ -102,5 +113,5 @@ app.get('*', function(req, res) { // Server let server = app.listen(app.get('port'), () => { - console.log(`Listening on: http://localhost:${server.address().port}`); + console.log(`Listening on: http://${server.address().address}:${server.address().port}`); });