-
Notifications
You must be signed in to change notification settings - Fork 244
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
platform-specific after_prepare hooks don't run after restoring #940
Comments
Maybe try the following. const platformList = cordova_util.listPlatforms(projectRoot);
options = options || { verbose: false, platforms: platformList, options: {} };
|
If you mean doing that in prepare.js, I think it will be too early. That line to set the initial options runs before any platforms are restored, so it would still end up being an empty array. |
Now I'm confused because cordova-lib/src/cordova/util.js Lines 279 to 281 in db5c8c0
I'll try to do some more testing tomorrow to see what going on with that... |
Okay, the root cause is this line: cordova-lib/src/hooks/HooksRunner.js Line 68 in db5c8c0
When it initially runs, I'm not sure why the hooks runner needs a separate list of platforms and plugins nested under a |
Bug Report
Problem
Include
cordova-plugin-androidx-adapter
in package.json, along withcordova-ios
andcordova-android
.With no platforms or plugins directories, run
cordova prepare
.What is expected to happen?
The
after_prepare
hook ofcordova-plugin-androidx-adapter
should be invoked at the end of the prepare, because the Android platform and the plugin have just been restored.What does actually happen?
The
after_prepare
hook never fires, cordova-lib verbose output indicates that no hook scripts were found.Information
What happens is that the ScriptsFinder tries to look up scripts in plugins for the provided list of platforms:
cordova-lib/src/hooks/scriptsFinder.js
Line 87 in db5c8c0
That list of platforms comes from the options of the HooksRunner:
cordova-lib/src/hooks/scriptsFinder.js
Line 114 in db5c8c0
The HooksRunner sets its list of platforms to a provided option, or falls back to querying for the installed platforms:
cordova-lib/src/hooks/HooksRunner.js
Lines 68 to 69 in db5c8c0
In the case of
prepare
, if a platform is not manually specified, we set that list of platforms to an empty array:cordova-lib/src/cordova/prepare.js
Line 32 in db5c8c0
The end result is that after restoring all the platforms and plugins, the HooksRunner still tries to find hook scripts with an empty platforms list, and the Android-specific hook never runs.
Suggested fix
HooksRunner should maybe check if the platforms array is empty and then still fallback to querying the installed platforms, rather than taking the empty input and running with it.
Version information
Was seeing this in an older project using Cordova CLI 10, but having looked at the code it seems like it's probably still an issue today.
Checklist
The text was updated successfully, but these errors were encountered: