Как обновить угловую версию в проекте angular-cli?


Я пытаюсь обновить свой проект angular 2 с 2.0.0 до 2.4.1. Я понимаю, что семантическое управление версиями было принято с выпуска 2.0.0 и 2.X. X релизы должны быть выпадающими заменами. Мой опыт, кажется, говорит об обратном. Может быть, я просто не знаю, что я делаю, но я не нашел это простым...

Попытка 1-Обновление Версии Вручную

мой наивный первый подход состоял в том, чтобы вручную обновить мой @angular зависимости. Вы можете сослаться на мой пакет.json ниже (обновление 1). Я сделал эти изменения, а затем сделал npm install и я получил несколько предупреждений, а затем получил следующую ошибку, когда я попытался сделать ng serve.

не удается прочитать свойство 'AssetUrl' из undefined

и мои предупреждения...

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_moduleschokidarnode_modulesfsevents):
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) , и некоторые из них кажутся быть в конфликте друг с другом. Поэтому я отказался от ручного подхода к обновлению моей угловой версии 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"
  }
}

обновление 1 пакета.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"
  }
}

Попытка 2-использовать npm-check-updates

С тех пор, как я попытался вишневый выбор моих угловых зависимостей для обновлений я оказался в паутине других зависимостей, которые необходимо обновить, я затем попытался просто обновить всё.

на основе ответ я попробовал следующий:

npm i -g npm-check-updates
npm-check-updates -u
npm install

это пошло нормально, но когда я попробовал ng служить я получаю следующую ошибку:

ошибки в модуль не NgModule

используя информацию, собранную здесь, я понизил свою версию typescript, эта ошибка исчезла, но появилась новая ошибка.

ошибка в обнаруженной ошибке разрешение значений символов статически. Ссылка на неэкспортируемые функции (позиции 29:10 в оригинале .TS file), разрешающий символы restPaths в REST-путях.ТС, решению символ Модуль в приложение.модуль.ТС, разрешение символом модуль в приложение.модуль.ТС

я пробивался через эти ошибки, но тот факт, что у меня так много проблем, поднимает красные флаги.

может кто-нибудь помочь? Я принимаю неправильный подход?

обратите внимание, что у меня есть видел некоторые предложения по обновлению проектов angular-cli, которые рекомендуют удалить angular-cli и переустановить его, а затем выполнить инициализацию ng и перезапись файлов конфигурации. Это не работает для меня, потому что у меня уже была последняя версия.

изменить: Утверждение о наличии последнего углового-cli было неверным. У меня была угловая-cli версия 1.0.0-beta.16 в то время как последний на момент редактирования 1.0.0-бета.24. Тем не менее, я попытался обновить свой угловой-cli и запустите ng init на моем существующем проекте. Теперь я замечаю, что я не следовал шагам, описанным на странице angular-cli github точно. Я пропустил npm install --save-dev angular-cli@latest, и я сдул все мои node_modules вместо того, чтобы использовать команду rm, которую они описывают.

6 58

6 ответов:

полезное:

используйте официальный Угловой Руководство По Обновлению выберите текущую версию и версию, которую вы хотите обновить для соответствующего руководства по обновлению. https://update.angular.io/

смотрите репозиторий GitHub угловой CLI diff для сравнения угловых изменений CLI. https://github.com/cexbrayat/angular-cli-diff/

обновление 08/05/2018:

угловой CLI 1.7 введен ng update.

обновление ng

новая угловая команда CLI, чтобы помочь упростить поддержание ваших проектов в актуальном состоянии с последними версиями. Пакеты могут определять логику, которая будет применяться к вашим проектам для обеспечения использования последних функций, а также внесения изменений для уменьшения или устранения влияния, связанного с критическими изменениями.

информация о конфигурации для обновление ng можно найти здесь

1.7 до 6 обновление

CLI 1.7 не поддерживает автоматическое обновление v6. Вручную установите @angular / cli через Диспетчер пакетов, а затем запустите схему миграции обновлений, чтобы завершить процесс.

npm install @angular/cli@^6.0.0
ng update @angular/cli --migrate-only --from=1

обновлено 30/04/2017:

Обновление 1.0

теперь вы должны следовать угловой CLI руководство по миграции


обновлено 04/03/2017:

обновление RC

вы должны следовать угловой CLI RC руководство по миграции


обновлено 20/02/2017:

пожалуйста, имейте в виду 1.0.0-бета.32 имеет критические изменения и удалены ng init and ng update

запрос на вытягивание здесь государства следующее:

BREAKING CHANGE: удаление команд ng init & ng update, поскольку их текущая реализация вызывает больше проблем, чем решает. Функциональность обновления вернется к CLI, до тех пор ручные обновления из приложений нужно будет сделать.

угловой-cli CHANGELOG.md утверждает следующее:

КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ - @angular/ cli: удаление ng init & ng update команды, потому что их текущая реализация вызывает больше проблем, чем решает. Однажды RC выпущен, нам не нужно будет использовать их для обновления больше как шаг будет таким же простым, как установка последней версии CLI.


обновлено 17/02/2017:

угловые-интерфейс командной строки добавлены в угловой пакет НПМ@. Теперь вы должны заменить приведенную выше команду следующим -

глобальные пакет:

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

локальный пакет проекта:

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

ОРИГИНАЛЬНЫЙ ОТВЕТ

вы должны следовать инструкциям изREADME.md на GitHub для обновления углового через угловые-интерфейс командной строки.

вот они:

обновление угловые-интерфейс командной строки

чтобы обновить angular-cli до новой версии, необходимо обновить оба глобальных пакет и пакет вашего проекта.

глобальный пакет:

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

локальный пакет проекта:

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

под управлением ng init будет проверять наличие изменений во всех автоматически сгенерированных файлах, созданных ng new, и позволит вам обновить свои. Вам предлагается четыре варианта для каждого измененного файла: y (перезаписать), n (не перезаписывать), d (показать разницу между вашим файлом и обновленным файлом) и h (справка).

тщательно прочитайте различия для каждого файла кода и либо примите изменения, либо включите их вручную после завершения ng init.

ответ JJB привел меня на правильный путь, но обновление прошло не очень гладко. Мой процесс подробно описан ниже. Надеюсь, в будущем процесс станет проще, и ответ JJB может быть использован или что-то еще более простое.

Сведения О Решении

я следил за шаги, которые захватили в ответ Джей-Джей-Би по обновлению угловые-CLI и точно. Однако, после запуска npm install угловой-cli был сломан. Даже пытаюсь сделать ng version приведет к ошибке. Так что я не мог сделать . Смотрите ошибку ниже:

$ 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)
    ...

чтобы иметь возможность использовать любые команды angular-cli, мне пришлось обновить свой пакет.JSON файл вручную и поднять @угловые зависимости до 2.4.1, а затем сделать еще один npm install.

после этого я смог сделать ng init. Я обновил свои файлы конфигурации, но ни один из моих файлов приложения/*. Когда это было сделано, я все еще получаю ошибки. Первый из них подробно описан ниже, второй был таким же типом ошибки, но в a отдельный файл.

ошибка при обнаружении ошибки статическое разрешение значений символов. Вызовы функций не поддерживаются. Рассмотрите возможность замены функции или лямбда со ссылкой на экспортируемую функцию (позиция 62: 9 в поле оригинальный.файл TS), разрешение символом модуль в C:/_git/my-project/code/src/main/frontend/src/app/app.модуль.ТС

эта ошибка связана со следующим поставщиком фабрики в моем Модуль

{ 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]
}

чтобы устранить эту ошибку, я использовал экспортированную функцию и внес следующее изменение в поставщик.

    { 
      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);
}

резюме

чтобы суммировать то, что я понимаю как наиболее важные детали, потребовались следующие изменения:

  1. обновите версию angular-cli, используя шаги, описанные в ответе JJB (и на их странице github).

  2. обновление @угловой версии рука, 2.0.0, похоже, не поддерживается angular-cli версии 1.0.0-beta.24

  3. С помощью углового-cli и ng init команда, я обновил свои файлы конфигурации. Я думаю, что критические изменения были в angular-cli.JSON и пакет.формат JSON. См. раздел изменения файла конфигурации внизу.

  4. внесите изменения в код для экспорта функций, прежде чем я буду ссылаться на них, как записано в решении подробности.

Ключевые Изменения Конфигурации

угловой-cli.изменения в JSON

{
  "project": {
    "version": "1.0.0-beta.16",
    "name": "frontend"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": "assets",
...

изменен...

{
  "project": {
    "version": "1.0.0-beta.24",
    "name": "frontend"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico"
      ],
...

мой пакет.json выглядит так после ручного слияния, которое учитывает версии, используемые ng-init. Обратите внимание, что моя угловая версия не 2.4.1, но изменение, которое я получил, было наследованием компонентов, которое было введено в 2.3, поэтому я был в порядке с этими версиями. Оригинальная упаковка.json находится в вопрос.

{
  "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"
  }
}

согласно документации здесь http://angularjs.blogspot.co.uk/2017/03/angular-400-now-available.html Вы "должны" просто уметь бегать...

npm установить @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@последний машинописный текст@latest --save

я попробовал и получил пару ошибок из-за моей зоны.библиотеки js и ngrx/store становятся старше версии.

обновление до последних версий npm install zone.js@latest --save и npm install @ngrx/store@latest -save, затем запуск угловой установки снова работал для меня.

просто используйте встроенную функцию углового CLI

ng update

обновить до последней версии.

удалить :

npm uninstall -g angular-cli

переустановить (с пряжей)

# npm install --global yarn
yarn global add @angular/cli@latest
ng set --global packageManager=yarn  # This will help ng-cli to use yarn

переустановить (с npm)

npm install --global @angular/cli@latest

другой способ-не использовать глобальную установку, а добавить /node_modules/.bin папка в пути, или использовать сценарии npm. Это будет мягче для обновления.

чтобы обновить Angular CLI до новой версии, необходимо обновить как глобальный пакет, так и локальный пакет вашего проекта.

глобальный пакет:

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

локальный проект пакет:

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

смотрите ссылку https://github.com/angular/angular-cli