Open khylias opened 5 years ago
Hi,
I try to build my project with Universal, but after some errors, I've got always ReferenceError: Zone is not defined on serve:universal. I browse so many tutorials and topics on Angular 5 and Universal but it seems error persist.
ReferenceError: Zone is not defined
serve:universal
Environments: Angular 5.2.11, nguniversal 5.0.0
Preview of my configs files :
package.json
{ [...] "scripts": { "ng": "ng", [...] "build:universal": "npm run build:client-and-server-bundles && npm run webpack:server", "serve:universal": "node dist/server.js", "build:client-and-server-bundles": "ng build --prod && ng build --prod --app 1 --output-hashing=false", "webpack:server": "webpack --config webpack.server.config.js --progress --colors" }, "private": true, "dependencies": { "@angular/animations": "^5.2.11", "@angular/common": "^5.2.11", "@angular/compiler": "^5.2.11", "@angular/core": "^5.2.11", "@angular/forms": "^5.2.11", "@angular/http": "^5.2.11", "@angular/platform-browser": "^5.2.11", "@angular/platform-browser-dynamic": "^5.2.11", "@angular/platform-server": "5.2.11", "@angular/router": "^5.2.11", "@ng-select/ng-select": "^0.34.3", "@ngu/carousel": "^1.4.8", "@nguniversal/express-engine": "5.0.0", "@nguniversal/module-map-ngfactory-loader": "5.0.0", [...] "protractor-cucumber-framework": "^4.2.0", "rxjs": "^5.5.11", "ts-loader": "^5.2.2", "zone.js": "^0.8.26" }, "devDependencies": { "@angular/cli": "~1.7.3", "@angular/compiler-cli": "^5.2.11", "@angular/language-service": "^5.2.11", "@types/jasmine": "~2.8.3", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", [...] "webpack": "^4.20.2", "webpack-cli": "^3.1.2", "window-mock": "^0.0.13", "yargs": "^11.0.0" } }
webpack.server.config.js
const path = require('path'); const webpack = require('webpack'); const WindowMock = require('window-mock'); const fakeWindow = WindowMock; module.exports = { entry: { server: './server.ts' }, resolve: { extensions: ['.js', '.ts'] }, target: 'node', // this makes sure we include node_modules and other 3rd party libraries externals: [/(node_modules|main\..*\.js)/], output: { path: path.join(__dirname, 'dist'), filename: '[name].js' }, module: { rules: [{ test: /\.ts$/, loader: 'ts-loader' }] }, plugins: [ // Temporary Fix for issue: https://github.com/angular/angular/issues/11580 // for 'WARNING Critical dependency: the request of a dependency is an expression' new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, path.join(__dirname, 'src'), // location of your src {} // a map of your routes ), new webpack.ContextReplacementPlugin( /(.+)?express(\\|\/)(.+)?/, path.join(__dirname, 'src'), {} ), new webpack.DefinePlugin({ window: fakeWindow, document: fakeWindow.document, location: JSON.stringify({ protocol: 'https', host: `localhost` }) }) ] };
server.ts
// These are important and needed before anything else import 'zone.js/dist/zone-node'; import 'reflect-metadata'; import { enableProdMode } from '@angular/core'; // Express Engine import { ngExpressEngine } from '@nguniversal/express-engine'; // Import module map for lazy loading import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; import * as express from 'express'; import { join } from 'path'; // Faster server renders w/ Prod mode (dev mode never needed) enableProdMode(); // Express server const app = express(); const PORT = process.env.PORT || 4000; const DIST_FOLDER = join(process.cwd(), 'dist'); // * NOTE :: leave this as require() since this file is built Dynamically from webpack const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main.bundle'); app.engine('html', ngExpressEngine({ bootstrap: AppServerModuleNgFactory, providers: [ provideModuleMap(LAZY_MODULE_MAP) ] })); app.set('view engine', 'html'); app.set('views', join(DIST_FOLDER, 'browser')); // TODO: implement data requests securely app.get('/api/*', (req, res) => { res.status(404).send('data requests are not supported'); }); // Server static files from /browser app.get('*.*', express.static(join(DIST_FOLDER, 'browser'))); // All regular routes use the Universal engine app.get('*', (req, res) => { res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req }); }); // Start up the Node server app.listen(PORT, () => { console.log(`Node server listening on http://localhost:${PORT}`); });
Most parts of code are from Angular 5 Guide for Universal.
look https://github.com/Angular-RU/angular-universal-starter
Hi,
I try to build my project with Universal, but after some errors, I've got always
ReferenceError: Zone is not defined
onserve:universal
. I browse so many tutorials and topics on Angular 5 and Universal but it seems error persist.Environments: Angular 5.2.11, nguniversal 5.0.0
Preview of my configs files :
package.json
webpack.server.config.js
server.ts
Most parts of code are from Angular 5 Guide for Universal.