问题描述
我在 Angular 11 上创建了新项目 - 客户端。 然后将 ng 版本更新为 12 Angular。 然后安装通用: ng 添加@nguniversal/express-engine
然后我尝试运行我的 Universal Angular,但它抛出错误:
npm run dev:ssr
[email protected] dev:ssr ng 运行客户端:serve-ssr
这是一个简单的服务器,用于在本地测试或调试 Angular 应用程序。 它尚未经过安全问题审核。
请勿将其用于生产!
未在工作区中设置配置“开发”。 npm 错误!代码 1 npm 错误!路径 E:\PRACTICE\MYPETPROJECTS\tanechka\client npm 错误!命令失败 npm 错误!命令 C:\WINDOWS\system32\cmd.exe /d /s /c ng run client:serve-ssr
npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Users\1\AppData\Local\npm-cache_logs\2021-06-08T14_35_07_681Z-debug.log
angular.json
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json","version": 1,"newProjectRoot": "projects","projects": {
"client": {
"projectType": "application","schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},"root": "","sourceRoot": "src","prefix": "app","architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser","options": {
"outputPath": "dist/client/browser","index": "src/index.html","main": "src/main.ts","polyfills": "src/polyfills.ts","tsConfig": "tsconfig.app.json","assets": [
"src/favicon.ico","src/assets"
],"styles": [
"src/styles.scss"
],"scripts": [],"vendorChunk": true,"extractLicenses": false,"buildOptimizer": false,"sourceMap": true,"optimization": false,"namedChunks": true
},"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts","with": "src/environments/environment.prod.ts"
}
],"optimization": true,"outputHashing": "all","sourceMap": false,"namedChunks": false,"extractLicenses": true,"vendorChunk": false,"buildOptimizer": true,"budgets": [
{
"type": "initial","maximumWarning": "2mb","maximumError": "5mb"
},{
"type": "anyComponentStyle","maximumWarning": "6kb","maximumError": "10kb"
}
]
}
},"defaultConfiguration": ""
},"serve": {
"builder": "@angular-devkit/build-angular:dev-server","options": {
"browserTarget": "client:build"
},"configurations": {
"production": {
"browserTarget": "client:build:production"
}
}
},"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n","options": {
"browserTarget": "client:build"
}
},"test": {
"builder": "@angular-devkit/build-angular:karma","options": {
"main": "src/test.ts","tsConfig": "tsconfig.spec.json","karmaConfig": "karma.conf.js","scripts": []
}
},"lint": {
"builder": "@angular-devkit/build-angular:tslint","options": {
"tsConfig": [
"tsconfig.app.json","tsconfig.spec.json","e2e/tsconfig.json"
],"exclude": [
"**/node_modules/**"
]
}
},"e2e": {
"builder": "@angular-devkit/build-angular:protractor","options": {
"protractorConfig": "e2e/protractor.conf.js","devServerTarget": "client:serve"
},"configurations": {
"production": {
"devServerTarget": "client:serve:production"
}
}
},"server": {
"builder": "@angular-devkit/build-angular:server","options": {
"outputPath": "dist/client/server","main": "server.ts","tsConfig": "tsconfig.server.json","extractLicenses": false
},"configurations": {
"production": {
"outputHashing": "media","fileReplacements": [
{
"replace": "src/environments/environment.ts","extractLicenses": true
}
},"defaultConfiguration": "production"
},"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server","configurations": {
"development": {
"browserTarget": "client:build:development","serverTarget": "client:server:development"
},"production": {
"browserTarget": "client:build:production","serverTarget": "client:server:production"
}
},"defaultConfiguration": "development"
},"prerender": {
"builder": "@nguniversal/builders:prerender","options": {
"routes": [
"/"
]
},"configurations": {
"production": {
"browserTarget": "client:build:production","serverTarget": "client:server:production"
},"development": {
"browserTarget": "client:build:development","serverTarget": "client:server:development"
}
},"defaultConfiguration": "production"
}
}
}
},"defaultProject": "client"
}
package.json
{
"name": "client","version": "0.0.0","scripts": {
"ng": "ng","start": "ng serve","build": "ng build","test": "ng test","lint": "ng lint","e2e": "ng e2e","dev:ssr": "ng run client:serve-ssr","serve:ssr": "node dist/client/server/main.js","build:ssr": "ng build && ng run client:server","prerender": "ng run client:prerender"
},"private": true,"dependencies": {
"@angular/animations": "~12.0.3","@angular/common": "~12.0.3","@angular/compiler": "~12.0.3","@angular/core": "~12.0.3","@angular/forms": "~12.0.3","@angular/platform-browser": "~12.0.3","@angular/platform-browser-dynamic": "~12.0.3","@angular/platform-server": "~12.0.3","@angular/router": "~12.0.3","@nguniversal/express-engine": "^12.0.1","express": "^4.15.2","rxjs": "~6.6.0","tslib": "^2.0.0","zone.js": "~0.11.4"
},"devDependencies": {
"@angular-devkit/build-angular": "~12.0.3","@angular/cli": "~12.0.3","@angular/compiler-cli": "~12.0.3","@nguniversal/builders": "^12.0.1","@types/express": "^4.17.0","@types/jasmine": "~3.6.0","@types/node": "^12.11.1","codelyzer": "^6.0.0","jasmine-core": "~3.7.1","jasmine-spec-reporter": "~5.0.0","karma": "~6.3.3","karma-chrome-launcher": "~3.1.0","karma-coverage": "~2.0.3","karma-jasmine": "~4.0.0","karma-jasmine-html-reporter": "^1.6.0","protractor": "~7.0.0","ts-node": "~8.3.0","tslint": "~6.1.0","typescript": "~4.2.4"
}
}
我尝试在服务的“配置”中添加“开发”:
但是没有用。
解决方法
我遇到了完全相同的问题,我第一次去环球影城。
我在 angular.json 的以下节点中添加了“开发”配置:-
projects->{project-name}->architect->build->configurations
projects->{project-name}->architect->server->configurations
由于我通常使用“生产”和“暂存”配置运行,我只是复制了暂存配置并进行了一些调整以停止文件替换,并在我习惯了服务器端渲染的同时为我提供了一个简单的调试平台。
,没有任何帮助。因此,我使用 Angular 12 删除了该项目,并使用 Angular 11 创建了一个新项目并添加了 Universal,运行 dev:ssr,它就可以工作了!
,我在 GitHub 上针对此主题创建了问题:https://github.com/angular/universal/issues/2158
工作决定是: 您可以尝试删除serve-ssr上的这一行:“defaultConfiguration”:“development”和“configuration.development path。然后在构建器下面添加如下选项: "options": { "browserTarget": "client:build","serverTarget": "client:server" },
Angular.json 必须有这样的视图(使用 Universal)
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server","options": {
"browserTarget": "angular12-universal:build","serverTarget": "angular12-universal:server"
},"configurations": {
"production": {
"browserTarget": "angular12-universal:build:production","serverTarget": "angular12-universal:server:production"
}
}
},
更改项目名称上的 angular12-universal
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server","options": {
"browserTarget": "your-project-name-here:build","serverTarget": "your-project-name-here:server"
},"configurations": {
"production": {
"browserTarget": "your-project-name-here:build:production","serverTarget": "your-project-name-here:server:production"
}
}
},
- 注意,在版本 12 中,还有一种新的 SSR 实验方式,要选择加入,您可以使用 ng add @nguniversal/common。