【发布时间】:2017-05-15 04:50:39
【问题描述】:
我正在尝试将我的 angular 2 项目从 2.0.0 升级到 2.4.1。我知道自从2.0.0 版本和2.x.x 版本应该是插入式替换后,语义版本控制已被采用。我的经验似乎表明并非如此。也许我只是不知道我在做什么,但我还没有发现这很简单......
尝试 1 - 手动版本升级
我天真的第一种方法是手动更新我的 @angular 依赖项。您可以在下面参考我的 package.json(更新 1)。我进行了这些更改,然后执行了 npm install 并收到了几个警告,然后当我尝试执行 ng serve 时收到以下错误。
无法读取未定义的属性“AssetUrl”
还有我的警告……
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.0.15: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN @angular/core@2.4.1 requires a peer of rxjs@^5.0.1 but none was installed.
npm WARN @angular/core@2.4.1 requires a peer of zone.js@^0.7.2 but none was installed.
npm WARN @angular/http@2.4.1 requires a peer of rxjs@^5.0.1 but none was installed.
npm WARN @angular/compiler-cli@0.6.4 requires a peer of @angular/compiler@2.0.2 but none was installed.
npm WARN @angular/compiler-cli@0.6.4 requires a peer of @angular/platform-server@2.0.2 but none was installed.
npm WARN @angular/compiler-cli@0.6.4 requires a peer of @angular/core@2.0.2 but none was installed.
npm WARN @ngtools/webpack@1.2.1 requires a peer of @angular/compiler-cli@^2.3.1 but none was installed.
npm WARN @ngtools/webpack@1.2.1 requires a peer of @angular/tsc-wrapped@^0.5.0 but none was installed.
npm WARN @ngtools/webpack@1.2.1 requires a peer of webpack@^2.1.0-beta.25 but none was installed.
所以我尝试修复这些警告,但我不知道如何修复所有警告(例如@ngtools/webpack),其中一些似乎相互冲突。所以我放弃了手动更新 Angular 2 版本的方法...
原始包.json
{
"name": "frontend",
"version": "0.0.0",
"license": "MIT",
"angular-cli": {},
"scripts": {
"start": "ng serve",
"lint": "tslint \"src/**/*.ts\"",
"test": "ng test",
"pree2e": "webdriver-manager update",
"e2e": "protractor",
"build": "ng build",
"buildProd": "ng build --env=prod"
},
"private": true,
"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/material": "^2.0.0-alpha.9-experimental-pizza",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/router": "3.0.0",
"@types/google-libphonenumber": "^7.4.8",
"angular2-datatable": "^0.4.2",
"apollo-client": "^0.4.22",
"core-js": "^2.4.1",
"google-libphonenumber": "^2.0.4",
"graphql-tag": "^0.1.15",
"hammerjs": "^2.0.8",
"ng2-bootstrap": "^1.1.16",
"rxjs": "5.0.0-beta.12",
"ts-helpers": "^1.1.2",
"zone.js": "^0.6.26"
},
"devDependencies": {
"@types/hammerjs": "^2.0.33",
"@types/jasmine": "^2.2.30",
"@types/lodash": "^4.14.39",
"angular-cli": "1.0.0-beta.16",
"codelyzer": "~0.0.26",
"jasmine-core": "2.4.1",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "4.0.9",
"ts-node": "1.2.1",
"tslint": "3.13.0",
"typescript": "2.0.2",
"typings": "1.4.0"
}
}
package.json 的更新 1
{
"name": "frontend",
"version": "0.0.0",
"license": "MIT",
"angular-cli": {},
"scripts": {
"start": "ng serve",
"lint": "tslint \"src/**/*.ts\"",
"test": "ng test",
"pree2e": "webdriver-manager update",
"e2e": "protractor",
"build": "ng build",
"buildProd": "ng build --env=prod"
},
"private": true,
"dependencies": {
"@angular/common": "2.4.1",
"@angular/compiler": "2.4.1",
"@angular/core": "2.4.1",
"@angular/forms": "2.4.1",
"@angular/http": "2.4.1",
"@angular/material": "^2.0.0-alpha.9-experimental-pizza",
"@angular/platform-browser": "2.4.1",
"@angular/platform-browser-dynamic": "2.4.1",
"@angular/router": "3.0.0",
"@types/google-libphonenumber": "^7.4.8",
"angular2-datatable": "^0.4.2",
"apollo-client": "^0.4.22",
"core-js": "^2.4.1",
"google-libphonenumber": "^2.0.4",
"graphql-tag": "^0.1.15",
"hammerjs": "^2.0.8",
"ng2-bootstrap": "^1.1.16",
"rxjs": "5.0.1",
"ts-helpers": "^1.1.2",
"zone.js": "^0.7.2"
},
"devDependencies": {
"@types/hammerjs": "^2.0.33",
"@types/jasmine": "^2.2.30",
"@types/lodash": "^4.14.39",
"angular-cli": "1.0.0-beta.16",
"codelyzer": "~0.0.26",
"jasmine-core": "2.4.1",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "4.0.9",
"ts-node": "1.2.1",
"tslint": "3.13.0",
"typescript": "2.0.2",
"typings": "1.4.0"
}
}
尝试 2 - 使用 npm-check-updates
自从我尝试为更新挑选我的角度依赖项时,我最终陷入了需要更新的其他依赖项的蜘蛛网中,接下来我尝试更新所有内容。
基于this answer 我尝试了以下方法:
npm i -g npm-check-updates
npm-check-updates -u
npm install
这很好,但是当我尝试 ng serve 时出现以下错误:
AppModule 中的错误不是 NgModule
使用收集的信息here,我降级了我的打字稿版本,该错误消失了,但弹出了一个新错误。
错误中的错误遇到静态解析符号值。 引用了一个非导出函数(原文位置 29:10 .ts 文件),在 rest-paths.ts 中解析符号 restPaths,解析符号 app.module.ts 中的 AppModule, 解析 app.module.ts 中的符号 AppModule
我一直在努力克服这些错误,但我遇到这么多麻烦的事实正在引发危险信号。
有人可以帮忙吗?我是否采取了错误的方法?
请注意,我看到了一些关于更新 angular-cli 项目的建议,这些建议建议卸载 angular-cli 并重新安装它,然后执行 ng init 并覆盖您的配置文件。这对我不起作用,因为我已经有了最新版本。
编辑:
关于拥有最新 angular-cli 的声明是不正确的。我有angular-cli version 1.0.0-beta.16,而编辑时最新的是1.0.0-beta.24。尽管如此,我确实尝试更新我的 angular-cli 并在我现有的项目上运行 ng init。我现在注意到我没有完全按照 angular-cli github 页面上列出的步骤进行操作。我跳过了npm install --save-dev angular-cli@latest,我吹走了我所有的node_modules,而不是使用他们概述的rm 命令。
【问题讨论】:
标签: angular angular-cli