J'essaie de mettre à jour mon projet angulaire 2 à partir de 2.0.0
à 2.4.1
. Je comprends que le versionnage sémantique a été adopté depuis le 2.0.0
libération et 2.x.x
devraient être des remplacements immédiats. Mon expérience semble indiquer le contraire. Peut-être que je ne sais pas ce que je fais, mais je n'ai pas trouvé cela très simple...
Tentative 1 - Mise à niveau manuelle de la version
Ma première approche naïve a été de mettre à jour manuellement ma @angular
dépendances. Vous pouvez référencer mon package.json ci-dessous (mise à jour 1). J'ai fait ces changements, puis j'ai fait un npm install
et j'ai reçu plusieurs avertissements puis j'ai obtenu l'erreur suivante lorsque j'ai essayé de faire un ng serve
.
Impossible de lire la propriété 'AssetUrl' d'undefined.
Et mes avertissements...
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.
Je suis donc descendu dans le terrier du lapin pour essayer de corriger ces avertissements mais je ne sais pas comment les corriger tous (par exemple @ngtools/webpack) et certains d'entre eux semblent être en conflit les uns avec les autres. J'ai donc abandonné l'approche manuelle de mise à jour de ma version d'angular 2...
Paquet 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"
}
}
Mise à jour 1 de package.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"
}
}
Tentative 2 - Utiliser npm-check-updates
Puisque lorsque j'ai essayé de sélectionner mes dépendances angulaires pour les mises à jour, je me suis retrouvé dans une toile d'araignée d'autres dépendances qui devaient être mises à jour, j'ai ensuite essayé de tout mettre à jour.
Sur la base de cette réponse J'ai essayé ce qui suit :
npm i -g npm-check-updates
npm-check-updates -u
npm install
Tout s'est bien passé mais quand j'ai essayé de servir ng, j'ai eu l'erreur suivante :
ERROR dans AppModule n'est pas un NgModule
Utilisation des informations recueillies ici J'ai mis à jour ma version de TypeScript, cette erreur a disparu, mais une nouvelle erreur est apparue.
ERROR dans Erreur rencontrée lors de la résolution statique des valeurs de symboles. Référence à une fonction non exportée (position 29:10 dans le fichier original .ts original), résolution du symbole restPaths dans rest-paths.ts, résolution du symbole AppModule dans app.module.ts, résolution du symbole AppModule dans app.module.ts.
Je me suis battu pour résoudre ces erreurs, mais le fait que j'aie autant de mal à les résoudre me fait tirer la sonnette d'alarme.
Quelqu'un peut-il m'aider ? Est-ce que j'adopte la mauvaise approche ?
Notez que j'ai vu certaines suggestions sur la mise à jour des projets angular-cli qui recommandent de désinstaller angular-cli et de le réinstaller, puis de faire un ng init et d'écraser vos fichiers de configuration. Cela n'a pas fonctionné pour moi car j'avais déjà la dernière version.
Edit : La déclaration sur le fait d'avoir la dernière version d'angular-cli était incorrecte. J'avais angular-cli version 1.0.0-beta.16
alors que le dernier en date au moment de cette édition est le suivant 1.0.0-beta.24
. Néanmoins, j'ai essayé de mettre à jour mon angular-cli et d'exécuter ng init sur mon projet existant. Je remarque maintenant que je n'ai pas suivi précisément les étapes décrites sur la page github d'angular-cli. J'ai sauté l'étape npm install --save-dev angular-cli@latest
et j'ai fait sauter tous mes node_modules au lieu d'utiliser la commande rm qu'ils proposent.