Подтвердить что ты не робот

Как обновить проект Angular CLI?

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

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

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

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

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

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected]^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 [email protected]^5.0.1 but none was installed.
npm WARN @angular/[email protected] requires a peer of [email protected]^0.7.2 but none was installed.
npm WARN @angular/[email protected] requires a peer of [email protected]^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/[email protected]^2.3.1 but none was installed.
npm WARN @ngtools/[email protected] requires a peer of @angular/[email protected]^0.5.0 but none was installed.
npm WARN @ngtools/[email protected] requires a peer of [email protected]^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 файла 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"
  }
}

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

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

Основываясь на этом ответе, я попробовал следующее:

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

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

ОШИБКА в AppModule не является NgModule

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

ОШИБКА в ошибке обнаружена при статическом разрешении значений символов. Ссылка на неэкспортированную функцию (позиция 29:10 в исходном файле .ts), разрешение символа restPaths в rest-paths.ts, разрешение символа AppModule в app.module.ts, разрешение символа AppModule в app.module.ts

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

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

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

Редактировать: утверждение о наличии последнего 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 [email protected] и уничтожил все свои node_modules вместо использования набросанной ими команды rm.

4b9b3361

Ответ 1

ПОЛЕЗНЫЕ:

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

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

ОБНОВЛЕНО 26/12/2018:

Используйте официальное руководство по обновлению Angular, упомянутое в полезном разделе выше. Он предоставляет самую свежую информацию со ссылками на другие ресурсы, которые могут быть полезны во время обновления.

ОБНОВЛЕНО 05/05/2018:

В угловой ng update CLI 1.7 ng update.

нг обновление

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

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

1,7 до 6 обновлений

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

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

ОБНОВЛЕНО 30/04/2017:

1.0 обновление

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


ОБНОВЛЕНО 04/03/2017:

RC Обновление

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


ОБНОВЛЕНО 20/02/2017:

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

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

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

Файл angular- cli CHANGELOG.md гласит следующее:

BREAKING CHANGES - @angular/cli: Удаление команд обновления ng init & ng, потому что их текущая реализация вызывает больше проблем, чем решает. Как только RC будет выпущен, нам больше не нужно будет их использовать для обновления, так как этот шаг будет таким же простым, как установка последней версии CLI.


ОБНОВЛЕНО 17/02/2017:

Angular-cli теперь добавлен в пакет NPM @angular. Теперь вы должны заменить вышеприведенную команду следующей:

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

npm uninstall -g angular-cli @angular/cli
npm cache clean
npm install -g @angular/[email protected]

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

rm -rf node_modules dist # On Windows use rmdir /s /q node_modules dist
npm install --save-dev @angular/[email protected]
npm install
ng init

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

Вы должны выполнить шаги из README.md на GitHub для обновления angular через angular-cli.

Вот они:

Обновление angular-cli

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

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

npm uninstall -g angular-cli
npm cache clean
npm install -g [email protected]

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

rm -rf node_modules dist tmp # On Windows use rmdir /s /q node_modules dist tmp
npm install --save-dev [email protected]
npm install
ng init

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

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

Ответ 2

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

Сведения о решении

Я выполнил шаги, зафиксированные в ответе JJB, чтобы точно обновить angular -cli. Однако после запуска npm install angular -cli был сломан. Даже попытка сделать ng version приведет к ошибке. Поэтому я не мог выполнить команду ng init. См. Приведенную ниже ошибку:

$ 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, мне пришлось вручную обновить файл package.json и наложить привязки @angular на 2.4.1, а затем сделать еще один npm install.

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

Ошибка в ошибке. Вызов функций не поддерживается. Рассмотрим замену функции или лямбда со ссылкой на экспортированную функцию (позиция 62: 9 в файл .ts), разрешающий символ AppModule в C:/_ мерзавец/мой-проект/код/​​SRC/главная/интерфейс/SRC/приложение/app.module.ts

Эта ошибка привязана к следующему провайдеру factory в моем 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]
}

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

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

Резюме

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

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

  • Обновление версии @ angular вручную, 2.0.0, похоже, не поддерживалось angular -cli version 1.0.0-beta.24

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

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

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

angular -cli.json changes

{
  "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"
      ],
...

My package.json выглядит так после ручного слияния, который рассматривает версии, используемые ng-init. Обратите внимание, что моя версия angular не 2.4.1, но изменение, которое я получил после, было наследованием компонента, которое было введено в 2.3, поэтому я был в порядке с этими версиями. Исходный package.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"
  }
}

Ответ 3

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

ng update

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

Ответ 4

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

npm install @ angular/{common, compiler, compiler-cli, core, forms, http, platform-browser, platform-browser-dynamic, platform-server, router, animations} @latest typescript @latest --save

Я попробовал это и получил пару ошибок из-за того, что мои библиотеки zone.js и ngrx/store были более старыми версиями.

Обновление этих версий до последних версий npm install [email protected] --save и npm install @ngrx/[email protected] -save, после чего работа с установкой angular снова работала для меня.

Ответ 5

Удалить:

npm uninstall -g angular-cli

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

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

Переустановите (с номером npm)

npm install --global @angular/[email protected]

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

Ответ 6

Решение, которое сработало для меня:

  • Удалить node_modules и папку dist
  • (в cmd) >> ng update --all --force
  • (в cmd) >> npm install typescript @"> = 3.4.0 и <3.5.0" --save -dev --save -exact
  • (в cmd) >> npm install --save core-js
  • Комментирование импорта 'core-js/es7/refle'; в polyfill.ts
  • (в cmd) >> нг подача

Ответ 7

Чтобы обновить CLI Angular до новой версии, вы должны обновить глобальный пакет и локальный пакет проекта.

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

npm uninstall -g @angular/cli
npm cache clean
npm install -g @angular/[email protected]

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

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/[email protected]
npm install

См. ссылку https://github.com/angular/angular-cli