ionic-team / ionic-cli

The Ionic command-line interface
MIT License
2k stars 644 forks source link

re-add support for --configuration option for Angular CLI 14.x command "ng run app:build" #4881

Closed russaa closed 3 months ago

russaa commented 1 year ago

Description: starting with Angular 14.x the Angular CLI ng run does not support the --configuration option any more, see Angular 14.0.0 Release Notes:

  • --configuration cannot be used with ng run. Provide the configuration as part of the target. Ex: ng run project:builder:configuration.

(and discussion in issue https://github.com/angular/angular-cli/issues/23385)

As a consequence, Angular configuration targets cannot be specified via the Ionic CLI command ionic build any more:
in Angular 13.x it was possible to specify a configuration with

ionic build -- --configuration=my_configuration

which would generate the command

ng.cmd run app:build --configuration=my_configuration

_(NOTE: my_configuration is just an example, that is angular.json would need to contain a configuration for my_configuration - to use an existing configuration that exists by default for Ionic apps you could use the configuration for production)_

in Angular 14.x this generated command produces an error

Error: Unknown argument: configuration.
Provide the configuration as part of the target 'ng run app:build:my_configuration'.
[ERROR] An error occurred while running subprocess ng.

One possible solution would be, that the Ionic CLI parses the --configuration option and appends it to the generated ng run target, i.e. for ionic build -- --configuration=my_configuration generate something like

ng.cmd run app:build:my_configuration

Steps to Reproduce:

test by explicitly setting production configuration in Ionic CLI options:

Output:

ionic build --verbose -- --configuration=production
  ionic:lib Terminal info: { ci: false, shell: '...', tty: true, windows: true } +0ms
  ionic:lib CLI global options: { _: [ 'build' ], help: null, h: null, verbose: true, quiet: null, interactive: true, color: true, confirm: null, json: null, project: null, '--': [ '--configuration=production' ] } +4ms
  ionic:lib:project Project type from config: @ionic/angular (angular) +0ms
  ionic:lib:project Project details: { context: 'app', type: 'angular', errors: [], configPath: '...\\ionic.config.json' } +0ms
  ionic Context: { binPath: '...\\node_modules\\@ionic\\cli', execPath: '...', version: '6.20.1' } +0ms
  ionic:lib:build build options: {
  ionic:lib:build   '--': [ '--configuration=production' ],
  ionic:lib:build   engine: 'browser',
  ionic:lib:build   platform: undefined,
  ionic:lib:build   project: 'app',
  ionic:lib:build   verbose: true,
  ionic:lib:build   configuration: undefined,
  ionic:lib:build   sourcemaps: undefined,
  ionic:lib:build   cordovaAssets: true,
  ionic:lib:build   watch: undefined,
  ionic:lib:build   type: 'angular'
  ionic:lib:build } +0ms
  ionic:lib:telemetry Sending telemetry for command: 'ionic build' [
  ionic:lib:telemetry   '--verbose',
  ionic:lib:telemetry   '--interactive',
  ionic:lib:telemetry   '--color',
  ionic:lib:telemetry   '--',
  ionic:lib:telemetry   '--configuration=production'
  ionic:lib:telemetry ] +0ms
  ionic:lib:hooks Looking for ionic:build:before npm script. +0ms
  ionic:lib:build Looking for ionic:build npm script. +9ms
> ng.cmd run app:build --verbose --configuration=production
Error: Unknown argument: configuration.
Provide the configuration as part of the target 'ng run app:build:production'.
[ERROR] An error occurred while running subprocess ng.

        ng.cmd run app:build --verbose --configuration=production exited with exit code 1.

        Re-running this command with the --verbose flag may provide more information.
  ionic:utils-process onBeforeExit handler: 'process.exit' received +0ms
  ionic:utils-process onBeforeExit handler: running 1 functions +2ms
  ionic:utils-process error while killing process tree for 26228: Error: Command failed: taskkill /pid 26228 /T /F
  ionic:utils-process FEHLER: Der Prozess "26228" wurde nicht gefunden.
  ionic:utils-process
  ionic:utils-process     at ChildProcess.exithandler (child_process.js:383:12)
  ionic:utils-process     at ChildProcess.emit (events.js:400:28)
  ionic:utils-process     at maybeClose (internal/child_process.js:1088:16)
  ionic:utils-process     at Process.ChildProcess._handle.onexit (internal/child_process.js:296:5) {
  ionic:utils-process   killed: false,
  ionic:utils-process   code: 128,
  ionic:utils-process   signal: null,
  ionic:utils-process   cmd: 'taskkill /pid 26228 /T /F'
  ionic:utils-process } +143ms
  ionic:utils-process onBeforeExit handler: error from function: Error: Command failed: taskkill /pid 26228 /T /F
  ionic:utils-process FEHLER: Der Prozess "26228" wurde nicht gefunden.
  ionic:utils-process
  ionic:utils-process     at ChildProcess.exithandler (child_process.js:383:12)
  ionic:utils-process     at ChildProcess.emit (events.js:400:28)
  ionic:utils-process     at maybeClose (internal/child_process.js:1088:16)
  ionic:utils-process     at Process.ChildProcess._handle.onexit (internal/child_process.js:296:5) {
  ionic:utils-process   killed: false,
  ionic:utils-process   code: 128,
  ionic:utils-process   signal: null,
  ionic:utils-process   cmd: 'taskkill /pid 26228 /T /F'
  ionic:utils-process } +1ms
  ionic:utils-process processExit: exiting (exit code: 1) +4ms

My ionic info:

D:\SpeechTrans4Kita\speechtrans4kita-frontend_TEST_Angular14>ionic info

Ionic:

   Ionic CLI                     : 6.20.1 (...\node_modules\@ionic\cli)
   Ionic Framework               : @ionic/angular 6.1.11
   @angular-devkit/build-angular : 14.0.3
   @angular-devkit/schematics    : 14.0.3
   @angular/cli                  : 14.0.3
   @ionic/angular-toolkit        : 6.1.0

Cordova:

   Cordova CLI       : 11.0.0
   Cordova Platforms : none
   Cordova Plugins   : no whitelisted plugins (0 plugins total)

Utility:

   cordova-res : 0.15.4
   native-run  : not installed globally

System:

   Android SDK Tools : 26.1.1 (...Android\Sdk)
   NodeJS            : v14.19.3 (...\node.exe)
   npm               : 6.14.17
   OS                : Windows 10

Other Information:

my need to use npm shrinkwrap to patch the angular version(s) used by @ionic/cordova-builders to use angular 14

hauserkristof commented 1 year ago

+1

hauserkristof commented 1 year ago

Or please add a migration guid

JanPhill commented 1 year ago

+1

russaa commented 3 months ago

fyi if anyone else is wondering:

the configuration option is now part of the ionic CLI itself.

So instead of

# previously/outdated:
ionic build -- --configuration=my_configuration

you would use

# new:
ionic build --configuration=my_configuration

(i.e. use it before/without the double hyphen)