Cómo actualizar la versión Angular en angular - cli proyecto?
Estoy intentando actualizar mi proyecto angular 2 de 2.0.0 a 2.4.1. Entiendo que el versionado semántico ha sido adoptado desde la versión 2.0.0 y 2.las versiones x.x deben ser reemplazos directos. Mi experiencia parece indicar lo contrario. Tal vez simplemente no sé lo que estoy haciendo, pero no he encontrado que esto sea sencillo...
Intento 1-Actualización manual de la versión
Mi primer enfoque ingenuo fue actualizar manualmente mis dependencias @angular. Puedes referencia de mi paquete.json a continuación (actualización 1). Hice estos cambios, luego hice un npm install
y recibí varias advertencias, luego obtuve el siguiente error cuando traté de hacer un ng serve
.
No se puede leer la propiedad 'AssetUrl' de undefined
Y mis advertencias...
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 [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN @angular/[email protected] requires a peer of rxjs@^5.0.1 but none was installed.
npm WARN @angular/[email protected] requires a peer of zone.js@^0.7.2 but none was installed.
npm WARN @angular/[email protected] requires a peer of rxjs@^5.0.1 but none was installed.
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none was installed.
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none was installed.
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none was installed.
npm WARN @ngtools/[email protected] requires a peer of @angular/compiler-cli@^2.3.1 but none was installed.
npm WARN @ngtools/[email protected] requires a peer of @angular/tsc-wrapped@^0.5.0 but none was installed.
npm WARN @ngtools/[email protected] requires a peer of webpack@^2.1.0-beta.25 but none was installed.
Así que me fui por el agujero del conejo de tratar de arreglar estas advertencias, pero no se cómo arreglar todos ellos (por ejemplo, @ngtools/webpack) y algunos de ellos parecen estar en conflicto entre sí. Así que abandoné la enfoque manual de actualización de mi versión angular 2...
Paquete original.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"
}
}
Actualización 1 del paquete.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.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"
}
}
Intento 2-Usar npm-check-updates
Desde que intenté seleccionar mis dependencias angulares para actualizaciones terminé en una telaraña de otras dependencias que necesitaban ser actualizadas, luego intenté simplemente actualizar todo.
Basado en esta respuesta Probé el siguiente:
npm i -g npm-check-updates
npm-check-updates -u
npm install
Esto salió bien, pero cuando traté ng servir me sale el siguiente error:
ERROR en AppModule no es un NgModule
Usando la información recopilada aquí, bajé mi versión de typescript, ese error desapareció, pero apareció un nuevo error.
ERROR en Error encontrado resolviendo valores de símbolos estáticamente. Referencia a una función no exportada (posición 29: 10 en el original .archivo ts), resolviendo restPaths de símbolos en los caminos de descanso.ts, símbolo de resolución AppModule en app.módulo.ts, resolución de símbolo AppModule en app.módulo.ts
He estado luchando a mi manera a través de estos errores, pero el hecho de que estoy teniendo tantos problemas está levantando banderas rojas.
¿alguien Puede ayudar? ¿Estoy tomando el enfoque equivocado?
Tenga en cuenta que he visto algunas sugerencias sobre la actualización de proyectos angular-cli que recomiendan desinstalar angular-cli y reinstalarlo, luego hacer un inicio ng y sobrescribir los archivos de configuración. Esto no funcionó para mí porque ya tenía la última versión.
Editar: La declaración sobre tener la última angular-cli era incorrecta. Tenía angular-cli versión 1.0.0-beta.16 mientras que el último en el momento de esta edición es 1.0.0-beta.24. Sin embargo, traté de actualizar mi angular-cli y ejecutar ng init en mi proyecto existente. Ahora me doy cuenta de que no seguí los pasos descritos en la página de angular-cli github con precisión. Me salté el mnp install install save-dev angular-cli@latest, y volé todos mis node_modules en lugar de usar el comando rm que describen.
6 answers
ÚTIL:
Utilice la guía oficial de actualización de Angular seleccione su versión actual y la versión a la que desea actualizar para la guía de actualización correspondiente. https://update.angular.io /
Vea GitHub repository Angular CLI diff para comparar los cambios de Angular CLI. https://github.com/cexbrayat/angular-cli-diff /
ACTUALIZADO 08/05/2018:
Introducción de Angular CLI 1.7 ng update
.
Ng update
Un nuevo comando Angular CLI para ayudar a simplificar el mantenimiento de sus proyectos al día con las últimas versiones. Los paquetes pueden definir la lógica que se aplicará a sus proyectos para garantizar el uso de las últimas características, así como hacer cambios para reducir o eliminar el impacto relacionado con los cambios de ruptura.
La información de configuración para ng update se puede encontrar aquí
1.7 a 6 update
CLI 1.7 no admite una actualización automática de v6. Instale manualmente @angular / cli a través de su gestor de paquetes y, a continuación, ejecute el esquema de migración de actualización para finalizar el proceso.
npm install @angular/cli@^6.0.0
ng update @angular/cli --migrate-only --from=1
ACTUALIZADO 30/04/2017:
1.0 Update
Ahora debe seguir la Guía de migración de Angular CLI
ACTUALIZADO 04/03/2017:
RC Update
Usted debe seguir la Guía de migración Angular CLI RC
ACTUALIZADO 20/02/2017:
Tenga en cuenta 1.0.0-beta.32 tiene cambios de ruptura y ha eliminado ng init and ng update
La pull request aquí establece lo siguiente:
BREAKING CHANGE: Eliminar los comandos ng init y ng update porque su implementación actual causa más problemas de los que resuelve. La funcionalidad de actualización volverá a la CLI, hasta entonces actualizaciones manuales de aplicaciones tendrá que hacer.
El angular-cli CHANGELOG.md establece lo siguiente:
CAMBIOS DE RUPTURA - @angular / cli: Eliminar los comandos ng init y ng update porque su implementación actual causa más problemas de los que resuelve. Una vez RC está liberado, no necesitaremos usarlos para actualizar ya que el el paso será tan simple como instalar la última versión de la CLI.
ACTUALIZADO 17/02/2017:
Angular-cli se ha añadido al paquete NPM @angular. Ahora debe reemplazar el comando anterior con el siguiente -
Paquete global:
npm uninstall -g angular-cli @angular/cli
npm cache clean
npm install -g @angular/cli@latest
Paquete de proyectos locales:
rm -rf node_modules dist # On Windows use rmdir /s /q node_modules dist
npm install --save-dev @angular/cli@latest
npm install
ng init
RESPUESTA ORIGINAL
Debe seguir los pasos de la README.md en GitHub para actualizar angular a través del angular-cli.
Aquí están:
Actualización angular-cli
Para actualizar angular-cli a una nueva versión, debe actualizar tanto el paquete global como el paquete local de su proyecto.
Paquete global:
npm uninstall -g angular-cli
npm cache clean
npm install -g angular-cli@latest
Paquete de proyectos locales:
rm -rf node_modules dist tmp # On Windows use rmdir /s /q node_modules dist tmp
npm install --save-dev angular-cli@latest
npm install
ng init
Ejecutando ng init
comprobará si hay cambios en todos los archivos generados automáticamente creados por ng new y le permitirá actualizar los suyos. Se le ofrecen cuatro opciones para cada archivo cambiado: y (sobrescribir), n( no sobrescribir), d (mostrar diferencias entre el archivo y el archivo actualizado) y h (ayuda).
Lea cuidadosamente las diferencias para cada archivo de código, y acepte los cambios o incorpórelos manualmente después de que finalice ng init.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-21 17:19:06
La respuesta de JJB me puso en el camino correcto, pero la actualización no fue muy bien. Mi proceso se detalla a continuación. Esperemos que el proceso se vuelva más fácil en el futuro y la respuesta de JJB se pueda usar o algo aún más sencillo.
Detalles de la solución
He seguido los pasos capturados en la respuesta de JJB para actualizar la angular-cli con precisión. Sin embargo, después de ejecutar npm install
angular-cli se rompió. Incluso tratando de hacer ng version
produciría un error. Así que no pude hacer el ng init
comando. Ver error más abajo:
$ ng init
core_1.Version is not a constructor
TypeError: core_1.Version is not a constructor
at Object.<anonymous> (C:\_git\my-project\code\src\main\frontend\node_modules\@angular\compiler-cli\src\version.js:18:19)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
...
Para poder usar cualquier comando angular-cli, tuve que actualizar mi paquete.archivo json a mano y subir las dependencias @ angular a 2.4.1, luego hacer otro npm install
.
Después de esto pude hacer ng init
. He actualizado mis archivos de configuración, pero ninguno de mis archivos app/*. Cuando esto se hizo, todavía estaba recibiendo errores. El primero se detalla a continuación, el segundo fue el mismo tipo de error pero en un archivo diferente.
ERROR en Error encontrado resolviendo valores de símbolo estáticamente. No se admiten llamadas a funciones. Considere reemplazar la función o lambda con una referencia a una función exportada (posición 62: 9 en el original .ts file), resolviendo el símbolo AppModule en C:/_git/my-project/code/src/main/frontend/src/app/app.módulo.ts
Este error está vinculado al siguiente proveedor de fábrica en mi AppModule
{ provide: Http, useFactory:
(backend: XHRBackend, options: RequestOptions, router: Router, navigationService: NavigationService, errorService: ErrorService) => {
return new HttpRerouteProvider(backend, options, router, navigationService, errorService);
}, deps: [XHRBackend, RequestOptions, Router, NavigationService, ErrorService]
}
Para abordar este error, había utilizado una función exportada e hizo el después del cambio al proveedor.
{
provide: Http,
useFactory: httpFactory,
deps: [XHRBackend, RequestOptions, Router, NavigationService, ErrorService]
}
... // elsewhere in AppModule
export function httpFactory(backend: XHRBackend,
options: RequestOptions,
router: Router,
navigationService: NavigationService,
errorService: ErrorService) {
return new HttpRerouteProvider(backend, options, router, navigationService, errorService);
}
Resumen
Para resumir lo que entiendo que son los detalles más importantes, se requerían los siguientes cambios: {[13]]}
Actualice la versión de angular-cli usando los pasos detallados en la respuesta de JJB (y en su página de github).
Actualización @ angular versión a mano, 2.0.0 no parecía ser compatible con angular-cli versión 1.0.0-beta.24
Con la ayuda de angular-cli y el
ng init
comando, he actualizado mis archivos de configuración. Creo que los cambios críticos fueron a angular-cli.json y paquete.json. Consulte cambios en el archivo de configuración en la parte inferior.Realice cambios de código en las funciones de exportación antes de que haga referencia a ellas, como se muestra en los detalles de la solución.
Cambios en la Configuración de las claves
Angular-cli.json changes
{
"project": {
"version": "1.0.0-beta.16",
"name": "frontend"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": "assets",
...
Cambiado a...
{
"project": {
"version": "1.0.0-beta.24",
"name": "frontend"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
...
Mi paquete.json se ve así después de una fusión manual que considera las versiones utilizadas por ng-init. Tenga en cuenta que mi versión angular no es 2.4.1, pero el cambio que buscaba era la herencia de componentes que se introdujo en 2.3, por lo que estaba bien con estas versiones. El paquete original.json está en la pregunta.
{
"name": "frontend",
"version": "0.0.0",
"license": "MIT",
"angular-cli": {},
"scripts": {
"ng": "ng",
"start": "ng serve",
"lint": "tslint \"src/**/*.ts\"",
"test": "ng test",
"pree2e": "webdriver-manager update --standalone false --gecko false",
"e2e": "protractor",
"build": "ng build",
"buildProd": "ng build --env=prod"
},
"private": true,
"dependencies": {
"@angular/common": "^2.3.1",
"@angular/compiler": "^2.3.1",
"@angular/core": "^2.3.1",
"@angular/forms": "^2.3.1",
"@angular/http": "^2.3.1",
"@angular/platform-browser": "^2.3.1",
"@angular/platform-browser-dynamic": "^2.3.1",
"@angular/router": "^3.3.1",
"@angular/material": "^2.0.0-beta.1",
"@types/google-libphonenumber": "^7.4.8",
"angular2-datatable": "^0.4.2",
"apollo-client": "^0.4.22",
"core-js": "^2.4.1",
"rxjs": "^5.0.1",
"ts-helpers": "^1.1.1",
"zone.js": "^0.7.2",
"google-libphonenumber": "^2.0.4",
"graphql-tag": "^0.1.15",
"hammerjs": "^2.0.8",
"ng2-bootstrap": "^1.1.16"
},
"devDependencies": {
"@types/hammerjs": "^2.0.33",
"@angular/compiler-cli": "^2.3.1",
"@types/jasmine": "2.5.38",
"@types/lodash": "^4.14.39",
"@types/node": "^6.0.42",
"angular-cli": "1.0.0-beta.24",
"codelyzer": "~2.0.0-beta.1",
"jasmine-core": "2.5.2",
"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.13",
"ts-node": "1.2.1",
"tslint": "^4.0.2",
"typescript": "~2.0.3",
"typings": "1.4.0"
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-31 19:16:28
De acuerdo con la documentación aquí http://angularjs.blogspot.co.uk/2017/03/angular-400-now-available.html usted 'debería' simplemente ser capaz de ejecutar...
Instalación de Npm@angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest save save
Lo intenté y obtuve un par de errores debido a mi zona.las bibliotecas js y ngrx / store son versiones anteriores.
Actualización aquellos a las últimas versiones npm install zone.js@latest --save
y npm install @ngrx/store@latest -save
, luego ejecutar la instalación angular de nuevo funcionó para mí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-24 15:51:36
Simplemente use la función incorporada de Angular CLI
ng update
Para actualizar a la última versión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-24 10:35:15
Eliminar:
npm uninstall -g angular-cli
Reinstalar (con hilo)
# npm install --global yarn
yarn global add @angular/cli@latest
ng set --global packageManager=yarn # This will help ng-cli to use yarn
Reinstalar (con npm)
npm install --global @angular/cli@latest
Otra forma es no usar la instalación global, y agregar la carpeta /node_modules/.bin
en la RUTA, o usar scripts npm. Será más suave para actualizar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-15 19:53:44
Para actualizar Angular CLI a una nueva versión, debe actualizar tanto el paquete global como el paquete local de su proyecto.
Paquete global:
npm uninstall -g @angular/cli
npm cache clean
npm install -g @angular/cli@latest
Paquete de proyectos locales:
rm -rf node_modules dist # use rmdir /S/Q node_modules dist in Windows Command Prompt; use rm -r -fo node_modules,dist in Windows PowerShell
npm install --save-dev @angular/cli@latest
npm install
Véase la referencia https://github.com/angular/angular-cli
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 05:45:54