Muốn nâng cấp dự án từ Angular v5 lên Angular v6


114

Vì Angular 6 ở đây, tôi muốn nâng cấp hoặc chuyển ứng dụng máy khách góc 5 của mình lên góc 6, nhưng tôi không nhận được bất kỳ hướng dẫn hoặc bất kỳ điều gì có thể hướng dẫn tôi.

Theo tôi, tôi chỉ cần chạy một Angular CLI mới và sau đó phải chuyển nguồn cũ của tôi sang dự án mới. Tôi đọc Angular 6 đang sử dụng một trình kết xuất mới có tên là Ivy. Tôi có phải thay đổi dự án của mình theo Ivy không?


Câu trả lời:


272

Nâng cấp từ Angular v6 lên Angular v7

Phiên bản 7 của Angular đã được phát hành liên kết blog chính thức của Angular . Truy cập hướng dẫn cập nhật góc cạnh chính thức https://update.angular.io để biết thông tin chi tiết. Các bước này sẽ hoạt động đối với các ứng dụng góc 6 cơ bản sử dụng Angular Material.

ng update @angular/cli 
ng update @angular/core
ng update @angular/material

Nâng cấp từ Angular v5 lên Angular v6

Phiên bản 6 của Angular đã được phát hành liên kết blog chính thức của Angular . Tôi đã đề cập đến các bước nâng cấp chung bên dưới, nhưng trước và sau khi cập nhật, bạn cần thực hiện các thay đổi trong mã của mình để mã có thể hoạt động được trong v6, để biết thông tin chi tiết đó, hãy truy cập trang web chính thức https://update.angular.io .

Các bước nâng cấp (phần lớn được lấy từ Hướng dẫn cập nhật Angular chính thức cho một ứng dụng Angular cơ bản sử dụng Angular Material):

  1. Đảm bảo phiên bản NodeJS là 8.9+ nếu không cập nhật nó.

  2. Cập nhật Angular cli trên toàn cầu và cục bộ, đồng thời di chuyển cấu hình cũ .angular-cli.json sang định dạng angle.json mới bằng cách chạy như sau:

    npm install -g @angular/cli  
    npm install @angular/cli  
    ng update @angular/cli
    
  3. Cập nhật tất cả các gói khung công tác Angular của bạn lên v6 và phiên bản chính xác của RxJS và TypeScript bằng cách chạy như sau:

    ng update @angular/core
    
  4. Cập nhật Angular Material lên phiên bản mới nhất bằng cách chạy như sau:

    ng update @angular/material
    
  5. RxJS v6 có những thay đổi lớn so với v5, v6 mang lại gói tương thích ngược rxjs-compat sẽ giữ cho các ứng dụng của bạn hoạt động, nhưng bạn nên cấu trúc lại mã TypeScript để nó không phụ thuộc vào rxjs-compat. Để cấu trúc lại mã TypeScript, hãy chạy như sau:

    npm install -g rxjs-tslint   
    rxjs-5-to-6-migrate -p src/tsconfig.app.json
    

    Lưu ý: Khi tất cả các phần phụ thuộc của bạn đã cập nhật lên RxJS 6, hãy xóa rxjs- compat vì nó làm tăng kích thước gói. vui lòng xem Hướng dẫn nâng cấp RxJS này để biết thêm thông tin.

    npm uninstall rxjs-compat
    
  6. Xong chạy ng servera kiểm tra.
    Nếu bạn gặp lỗi trong bản dựng, hãy tham khảo https://update.angular.io để biết thông tin chi tiết.

Nâng cấp từ Angular v5 lên Angular 6.0.0-rc.5

  1. Nâng cấp rxjs lên 6.0.0-beta.0, vui lòng xem Hướng dẫn nâng cấp RxJS này để biết thêm thông tin. RxJS v6 có thay đổi đột ngột, do đó trước tiên hãy làm cho mã của bạn tương thích với phiên bản RxJS mới nhất.

  2. Cập nhật phiên bản NodeJS lên 8.9+ (điều này là bắt buộc đối với phiên bản cli 6 góc)

  3. Cập nhật gói Angular cli global lên phiên bản tiếp theo.

    npm uninstall -g @angular/cli
    npm cache verify
    

    nếu phiên bản npm <5 thì sử dụng npm cache clean

    npm install -g @angular/cli@next
    
  4. Thay đổi các phiên bản gói góc trong tệp package.json thành ^6.0.0-rc.5

    "dependencies": {
      "@angular/animations": "^6.0.0-rc.5",
      "@angular/cdk": "^6.0.0-rc.12",
      "@angular/common": "^6.0.0-rc.5",
      "@angular/compiler": "^6.0.0-rc.5",
      "@angular/core": "^6.0.0-rc.5",
      "@angular/forms": "^6.0.0-rc.5",
      "@angular/http": "^6.0.0-rc.5",
      "@angular/material": "^6.0.0-rc.12",
      "@angular/platform-browser": "^6.0.0-rc.5",
      "@angular/platform-browser-dynamic": "^6.0.0-rc.5",
      "@angular/router": "^6.0.0-rc.5",
      "core-js": "^2.5.5",
      "karma-jasmine": "^1.1.1",
      "rxjs": "^6.0.0-uncanny-rc.7",
      "rxjs-compat": "^6.0.0-uncanny-rc.7",
      "zone.js": "^0.8.26"
    },
    "devDependencies": {
      "@angular-devkit/build-angular": "~0.5.0",
      "@angular/cli": "^6.0.0-rc.5",
      "@angular/compiler-cli": "^6.0.0-rc.5",
      "@types/jasmine": "2.5.38",
      "@types/node": "~8.9.4",
      "codelyzer": "~4.1.0",
      "jasmine-core": "~2.5.2",
      "jasmine-spec-reporter": "~3.2.0",
      "karma": "~1.4.1",
      "karma-chrome-launcher": "~2.0.0",
      "karma-cli": "~1.0.1",
      "karma-coverage-istanbul-reporter": "^0.2.0",
      "karma-jasmine": "~1.1.0",
      "karma-jasmine-html-reporter": "^0.2.2",
      "postcss-loader": "^2.1.4",
      "protractor": "~5.1.0",
      "ts-node": "~5.0.0",
      "tslint": "~5.9.1",
      "typescript": "^2.7.2"
    }
    
  5. Tiếp theo cập nhật gói Angular cli cục bộ lên phiên bản tiếp theo và cài đặt các gói được đề cập ở trên.

    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@next
    npm install 
    
  6. Định dạng cấu hình Angular CLI đã được thay đổi từ phiên bản cli 6.0.0-rc.2 góc cạnh và cấu hình hiện có của bạn có thể được cập nhật tự động bằng cách chạy lệnh sau. Nó sẽ loại bỏ tệp cấu hình cũ .angular-cli.json và sẽ ghi tệp angle.json mới .

    ng update @angular/cli --migrate-only --from=1.7.4

Lưu ý: - Nếu bạn gặp lỗi sau "Angular Compiler yêu cầu TypeScript> = 2.7.2 và <2.8.0 nhưng thay vào đó đã tìm thấy 2.8.3". chạy lệnh sau:

npm install typescript@2.7.2

update.angular.io không hoạt động trong Edge tại thời điểm này. Nó tải OK, nhưng khi bạn bắt đầu sử dụng một chút, nó sẽ gây ra một số loại sự cố khiến trang không phản hồi và trình duyệt hỏi bạn có muốn khôi phục trang hay không.
Devon Holcombe

3
Bước 5 Tôi đang làm bash: rxjs-5-to-6-migrate: command not found. Có suy nghĩ gì không?
Kyle Krzeski

khi tôi chạy ng update @angular/coretrong thư mục dự án ion của mình, tôi gặp lỗiInvalid range: "*"
smk

1
Sau tất cả các bước trên, tôi đã nhận được vấn đề ngu ngốc này: Không thể tìm thấy mô-đun "@angular-devkit/build-angular"từ ... Vì vậy, điều đó đã được khắc phục bằng npm install @angular-devkit/build-angular --save-dev. Khác hơn là tôi phải cập nhật thư viện đã được sử dụng trước rxjs-compat, giống như ng update @ngx-translate/core, ng update @ng-bootstrap/ng-bootstrapvì vài người trong số họ đã không được cập nhật đúng.
Arsen Khachaturyan

2
nếu bạn nhận được "Phiên bản Angular CLI toàn cầu (6.0.8) của bạn lớn hơn phiên bản cục bộ của bạn (1.6.8). Phiên bản Angular CLI cục bộ được sử dụng." sử dụng NPM cài đặt @ góc / cli @ mới nhất
Nakres

19

Angular 6 vừa được phát hành.

https://blog.angular.io/version-6-of-angular-now-available-cc56b0efa7a4

Đây là những gì đã làm việc cho một trong những dự án nhỏ hơn của tôi

  1. npm install -g @ angle / cli
  2. npm install @ angle / cli
  3. ng update @ angle / cli --migrate-only --from = 1.7.0
  4. ng update @ angle / core
  5. npm cài đặt rxjs-compat
  6. ng phục vụ

Bạn có thể cần cập nhật các tập lệnh đang chạy của mình trong package.json Ví dụ: nếu bạn sử dụng các cờ như "ứng dụng" và "môi trường" Các cờ này đã được cập nhật tương ứng thành "dự án" và "cấu hình".

Tham khảo https://update.angular.io/ để biết thêm hướng dẫn chi tiết.


Sau bước 2, tôi phải chuyển đổi các tệp .json sau (tsconfig, angle-cli.json, tslint) thành UTF8 mà không có BOM. Tôi gặp lỗi ký tự JSON không hợp lệ ở bước đó.
Benjamin

16

Chỉ cần sử dụng hướng dẫn nâng cấp chính thức sẽ cho bạn biết bạn cần làm gì cho các nhu cầu cụ thể của riêng mình:

Nâng cấp góc cạnh

https://update.angular.io/


1
đây phải thực sự là câu trả lời được chấp nhận vì nó trả lời tất cả các câu hỏi nâng cấp khác
theTechRebel

8

Kiểm tra chi tiết nâng cấp từng bước từ Angular 5 lên Angular 6. Những điều này cung cấp chi tiết về các vấn đề bạn gặp phải trong quá trình nâng cấp và cách giải quyết chúng.

  • Cập nhật phiên bản nút của bạn lên 8 hoặc cao hơn và Cài đặt Angular cli mới nhất trên toàn cầu trước npm i -g @ angle / cli @ mới nhất.
  • Angular 6 sử dụng angle.json làm tệp cấu hình thay vì .anguar-cli.json. Ngoài ra tslint đã được thay đổi. Kiểm tra https://github.com/angular/angular-cli/wiki/angular-workspace để biết chi tiết cấu hình mới nhất. Bạn phải di chuyển bất kỳ cấu hình hiện có nào của mình sang tệp cấu hình mới.
  • Để thực hiện việc này, hãy tạo một dự án giả khác với cli mới nhất bằng cách sử dụng 'dự án của bạn' mới và cùng các giá trị mặc định như tiền tố, kiểu, v.v. bạn đã sử dụng trước đó cho dự án của mình. Tạo dự án mới với cli https://github.com/angular/angular-cli/wiki/new
  • Sử dụng https://update.angular.io/ để kiểm tra những gì đã được thay đổi từ phiên bản Angular → Angular 6. Nó cung cấp cách sử dụng để thay đổi / sửa chữa chúng.
  • Làm theo các bước ở trên và sao chép / cập nhật tệp angle.json được tạo ở bước 2. Thực hiện npm i trong dự án của bạn để nhận tất cả các phụ thuộc và cập nhật npm
  • Bây giờ đến phần lớn. Nâng cấp RxJS và giải quyết xung đột. RxJS đã tiêu chuẩn hóa việc nhập các nhà khai thác và người tạo có thể quan sát với bản phát hành này. Thực hiện npm i -g rxjs-tslint và thêm cấu hình lint bên dưới trong tslint.json
{
  "rulesDirectory": [
    "node_modules/rxjs-tslint"
  ],
  "rules": {
    "rxjs-collapse-imports": true,
    "rxjs-pipeable-operators-only": true,
    "rxjs-no-static-observable-methods": true,
    "rxjs-proper-imports": true
  }
}
  • Bây giờ chạy ng lint --fix. Điều này khắc phục được một số mục nhưng hầu hết các vấn đề còn lại sẽ được đánh dấu và bạn phải khắc phục nó theo cách thủ công.

Thay đổi tên nhà điều hành:

do -> tap, 
catch -> catchError, 
switch -> switchAll, 
finally -> finalize

Tất cả các toán tử được chuyển sang rxjs / operator

import { map, filter, reduce } from 'rxjs/operators';

Các phương thức tạo có thể quan sát được chuyển sang rxjs

   import { Observable, Subject, of, from } from 'rxjs'; 

Bạn đã sẵn sàng. Chào mừng bạn đến với Angular 6 :) Kiểm tra bài đăng trên blog của tôi ở đây về cách nâng cấp


4

Tôi đã phải chạy lại cập nhật @ angle / cli để angle-cli.json được thay đổi thành angle.json


2

Vui lòng chạy các bình luận bên dưới để cập nhật lên Angular 6 từ Angular 5

  1. ng update @ angle / cli
  2. ng update @ angle / core
  3. npm cài đặt rxjs-compat (Để hỗ trợ phiên bản cũ hơn rxjs 5.6)
  4. npm install -g rxjs-tslint (Để thay đổi từ định dạng rxjs 5 sang rxjs 6 trong mã. Cài đặt trên toàn cầu thì chỉ hoạt động)
  5. rxjs-5-to-6-migrate -p src / tsconfig.app.json (Sau khi cài đặt, chúng tôi phải thay đổi nó trong mã nguồn của chúng tôi thành định dạng rxjs6)
  6. npm gỡ cài đặt rxjs-compat (Gỡ bỏ phần này cuối cùng)

2

Hướng dẫn đầy đủ

----------------- With angle-cli --------------------------

1. Cập nhật CLI trên toàn cầu và địa phương

  1. Sử dụng NPM (đảm bảo rằng bạn có phiên bản nút 8+)

    npm uninstall -g @angular/cli npm cache clean npm install -g @angular/cli@latest npm i @angular/cli --save

  2. Sử dụng sợi

    yarn remove @angular/cli yarn global add @angular/cli yarn add @angular/cli

2. cập nhật phụ thuộc

ng update @angular/cli
ng update @angular/core
ng update @angular/material
ng update rxjs

Angular 6 hiện phụ thuộc vào TypeScript 2.7 và RxJS 6

Thông thường, điều đó có nghĩa là bạn phải cập nhật mã của mình ở mọi nơi mà các nhà khai thác và nhập RxJS được sử dụng, nhưng may mắn thay, có một gói giải quyết hầu hết các công việc nặng nhọc:

npm i -g rxjs-tslint 

//or using yarn

yarn global add rxjs-tslint

Sau đó, bạn có thể chạy rxjs-5-to-6-migrate

rxjs-5-to-6-migrate -p src/tsconfig.app.json

cuối cùng loại bỏ rxjs-compat

npm uninstall rxjs-compat

// or using Yarn

yarn remove rxjs-compat

Tham khảo liên kết này https://alligator.io/angular/angular-6/


------------------- Không có góc-cli -------------------------

Vì vậy, bạn phải cập nhật package.jsontệp của mình theo cách thủ công .

package.json chụp màn hình các gói nâng cấp

Sau đó chạy

 npm update
 npm install --save rxjs-compat
 npm i -g rxjs-tslint
 rxjs-5-to-6-migrate -p src/tsconfig.app.json

Tôi nhận được bash: rxjs-5-to-6-migrate: command not foundkhi cố gắng chạy lệnh rxjs-5-to-6-migrate. Có suy nghĩ gì không?
Kyle Krzeski

1
@WilliamHampshire bạn đã chạy npm install -g rxjs-tslint chưa
Joe

Yup không biết nó là gì @Joe
Kyle Krzeski

có thể bạn không có tslint mới nhất?
Joe

1
Bạn có biết làm thế nào để làm điều này mà không cần sử dụng cli góc? Trong dự án của mình, tôi làm mọi thứ theo cách thủ công
Daniel

1

Như Vinay Kumar đã chỉ ra rằng họ sẽ không cập nhật Angular CLI được cài đặt toàn cầu. Để cập nhật nó trên toàn cầu, chỉ cần sử dụng các lệnh sau:

npm uninstall -g @angular/cli
npm cache clean
npm install -g @angular/cli@latest

Lưu ý nếu bạn muốn cập nhật dự án hiện tại, bạn phải sửa đổi dự án hiện có, bạn nên thay đổi package.json bên trong dự án của mình.

Không có thay đổi đột phá nào trong bản thân Angular nhưng chúng nằm trong RxJS, vì vậy đừng quên sử dụng thư viện rxjs-compat để làm việc với mã kế thừa.

  npm install --save rxjs-compat  

Tôi đã viết một bài viết hay về cài đặt / cập nhật Angular CLI http://bmnteam.com/angular-cli-installation/


0

chỉ cần chạy lệnh sau:

ng update

lưu ý: điều này sẽ không cập nhật trên toàn cầu.


0

Đây là cách tôi làm cho nó hoạt động.

Môi trường của tôi:

Angular CLI Global: 6.0.0, Local: 1.7.4, Angular: 5.2, Typescript 2.5.3

Lưu ý: Để kích hoạt ng Updatebạn cần cài đặt Angular CLI 6.0 trước npm install -g @angular/cli or npm install @angular/cli

  1. ng update //update Angular Package core/common/complier... to 6.0.0

  2. ng update @angular/cli //change angular-cli.json to angular.json

tùy chọn nếu bạn có angle-material 5.4.2, ngx-translate 9.1.1, ng-bootstrap / ng-bootstrap 1.1.1:

  1. ng update @angular/material //upgrade to 6.0.1

  2. npm install @ngx-translate/core@10.0.1 --save //upgrade ngX translate to 10.0.1 for Angular 6

5 npm install --save @ng-bootstrap/ng-bootstrap@2.0.0 //for ng-bootstrap

Nếu bạn sử dụng Observable và gặp lỗi:

ERROR in node_modules/rxjs/Observable.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/Observable'. node_modules/rxjs/observable/of.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/observable/of'.

Thay đổi: import { Observable } from "rxjs/Observable"; import { of } from 'rxjs/observable/of';

Đến

import { Observable, of } from "rxjs";

Vấn đề về Angular CLI: https://github.com/angular/angular-cli/issues/10621


0

Có một số bước để nâng cấp 2/4/5 lên Angular 6.

npm uninstall --save-dev angular-cli
npm install --save-dev @angular/cli@latest
npm install

Để khắc phục sự cố liên quan đến "angle.json": -

ng update @angular/cli --migrate-only --from=1.7.4

Cửa hàng MIGRATION
https://github.com/ngrx/platform/blob/master/MIGRATION.md#ngrxstore

RXJS MIGRATION
https://www.academind.com/learn/javascript/rxjs-6-what-changed/

Hy vọng điều này sẽ giúp bạn :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.