【发布时间】:2020-12-25 14:32:29
【问题描述】:
我有一个使用角度通用的角度应用程序。当我使用 npm run build:prod 捆绑我的 Angular 应用程序时,一切看起来都很好,我没有收到任何错误,但是当运行 npm run server 以在浏览器中查看应用程序时,我收到以下错误:
D:\Projects\node.js\darsad-site\dist\server.js:1544155
Object(tslib_es6["c" /* __metadata */])("design:paramtypes", [Object, Object, Window,
^
ReferenceError: Window is not defined
at Module.<anonymous> (D:\Projects\node.js\darsad-site\dist\server.js:1544155:83)
at __webpack_require__ (D:\Projects\node.js\darsad-site\dist\server.js:50381:30)
at D:\Projects\node.js\darsad-site\dist\server.js:50445:18
at Object.<anonymous> (D:\Projects\node.js\darsad-site\dist\server.js:50448:10)
at __webpack_require__ (D:\Projects\node.js\darsad-site\dist\server.js:25201:30)
at Module.<anonymous> (D:\Projects\node.js\darsad-site\dist\server.js:1589621:90)
at __webpack_require__ (D:\Projects\node.js\darsad-site\dist\server.js:25201:30)
at D:\Projects\node.js\darsad-site\dist\server.js:25265:18
at Object.<anonymous> (D:\Projects\node.js\darsad-site\dist\server.js:25268:10)
at __webpack_require__ (D:\Projects\node.js\darsad-site\dist\server.js:21:30)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! darsad@0.0.0 server: `node local.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the darsad@0.0.0 server script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Parsa\AppData\Roaming\npm-cache\_logs\2020-09-07T06_59_07_473Z-debug.log
这是我的 package.json 文件:
{
"name": "darsad",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"mode": "production",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"build:server:prod": "ng run darsad:server && webpack --config webpack.server.config.js --progress --colors",
"build:browser:prod": "ng build --prod",
"build:prod": "npm run build:browser:prod && npm run build:server:prod",
"server": "node local.js",
"build:browser:serverless": "ng build --prod --base-href /production/",
"build:serverless": "npm run build:browser:serverless && npm run build:server:serverless",
"build:prod:deploy": "npm run build:prod && npm run deploy",
"build:serverless:deploy": "npm run build:serverless && npm run deploy",
"deploy": "serverless deploy",
"build:server:serverless": "ng run darsad:server:serverless && webpack --config webpack.server.config.js --progress --colors",
"dev:ssr": "ng run darsad:serve-ssr",
"serve:ssr": "node dist/server/main.js",
"build:ssr": "ng build --prod && ng run darsad:server:production",
"prerender": "ng run darsad:prerender",
"buildWithIncreaseMemory": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build --prod"
},
"private": true,
"dependencies": {
"@angular/animations": "10.0.14",
"@angular/common": "^10.1.0",
"@angular/compiler": "10.0.14",
"@angular/core": "10.0.14",
"@angular/forms": "10.0.14",
"@angular/http": "^7.2.16",
"@angular/platform-browser": "^10.1.0",
"@angular/platform-browser-dynamic": "10.0.14",
"@angular/pwa": "0.802.2",
"@angular/router": "10.0.14",
"@fortawesome/angular-fontawesome": "^0.5.0",
"@fortawesome/fontawesome-svg-core": "^1.2.30",
"@fortawesome/free-solid-svg-icons": "^5.14.0",
"@gorniv/ngx-universal": "1.1.5",
"@ng-toolkit/serverless": "7.1.2",
"@ng-toolkit/universal": "^1.1.51",
"@nguniversal/common": "^10.1.0",
"@nguniversal/express-engine": "^10.1.0",
"@nguniversal/module-map-ngfactory-loader": "^8.2.6",
"@schematics/angular": "^10.1.0",
"angular2-cookie": "^1.2.6",
"angular2-useful-swiper": "^5.0.1",
"aws-serverless-express": "^3.3.8",
"commonjs": "0.0.1",
"cookie-parser": "1.4.4",
"core-js": "3.2.1",
"cors": "~2.8.4",
"cp-cli": "^1.1.0",
"express": "^4.15.2",
"font-awesome": "^4.7.0",
"highcharts": "^7.2.2",
"highcharts-angular": "^2.8.0",
"jquery": "^3.5.1",
"ng2-jalali-date-picker": "^2.4.2",
"ngx-cookie-service": "^2.4.0",
"rxjs": "6.6.2",
"swiper": "^3.4.2",
"ts-loader": "4.2.0",
"tslib": "^1.13.0",
"zone.js": "^0.10.3"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.1000.8",
"@angular/cli": "10.0.8",
"@angular/compiler-cli": "10.0.14",
"@angular/language-service": "10.0.14",
"@angular/platform-server": "10.0.14",
"@angularclass/hmr": "^2.1.3",
"@nguniversal/builders": "^10.1.0",
"@types/express": "^4.17.0",
"@types/jasmine": "3.4.0",
"@types/jasminewd2": "2.0.6",
"@types/node": "12.0.10",
"codelyzer": "5.1.0",
"jasmine-core": "3.4.0",
"jasmine-spec-reporter": "4.2.1",
"karma": "4.2.0",
"karma-chrome-launcher": "2.2.0",
"karma-cli": "2.0.0",
"karma-coverage-istanbul-reporter": "2.1.0",
"karma-jasmine": "2.0.1",
"karma-jasmine-html-reporter": "1.4.2",
"opencollective": "^1.0.3",
"protractor": "5.4.2",
"serverless": "1.40.0",
"serverless-apigw-binary": "^0.4.4",
"ts-loader": "4.2.0",
"ts-node": "8.3.0",
"tslint": "5.18.0",
"typescript": "3.9.7",
"webpack-bundle-analyzer": "3.4.1",
"webpack-cli": "3.3.7",
"webpack-node-externals": "1.7.2"
}
}
我的 server.ts 文件:
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import {enableProdMode} from '@angular/core';
import {ngExpressEngine} from '@nguniversal/express-engine';
import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader';
import * as express from 'express';
import * as bodyParser from 'body-parser';
import * as cors from 'cors';
import * as compression from 'compression';
import {join} from 'path';
enableProdMode();
export const app = express();
app.use(compression());
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// const DIST_FOLDER = join(process.cwd(), 'dist');
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
console.log(require('./dist/server/main'));
app.engine('html', ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [
provideModuleMap(LAZY_MODULE_MAP)
]
}));
app.set('view engine', 'html');
app.set('views', './dist/browser');
app.get('/redirect/**', (req, res) => {
const location = req.url.substring(10);
res.redirect(301, location);
});
app.get('*.*', express.static('./dist/browser', {
maxAge: '1y'
}));
app.get('/*', (req, res) => {
res.render('index', {req, res}, (err, html) => {
if (html) {
res.send(html);
} else {
console.log('server.ts');
console.error(err);
res.send(err);
}
});
});
需要提及的是,我在我的应用程序中注释掉了对 window 对象的任何使用,并尝试构建项目,它构建时没有任何错误,但是在运行 npm run server 时会引发先前的错误。
【问题讨论】:
标签: node.js angular angular-universal