You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Valentin Haloiu (JIRA)" <ji...@apache.org> on 2018/02/23 14:59:00 UTC

[jira] [Updated] (CB-13853) cordova prepare fails to install plugins

     [ https://issues.apache.org/jira/browse/CB-13853?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Valentin Haloiu updated CB-13853:
---------------------------------
    Summary: cordova prepare fails to install plugins  (was: Plugin installation is not deterministic)

> cordova prepare fails to install plugins
> ----------------------------------------
>
>                 Key: CB-13853
>                 URL: https://issues.apache.org/jira/browse/CB-13853
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: cordova-lib
>    Affects Versions: cordova@8.0.0
>         Environment: * Node {{9.5.0}}
>  * NPM {{5.6.0}}
>  * Cordova {{8.0.0}}
>            Reporter: Valentin Haloiu
>            Priority: Major
>
> h2. Demo cordova project
> [cordova-plugin-install-bug-demo|https://github.com/vially/cordova-plugin-install-bug-demo]
> h2. Steps to reproduce
> After cloning the repo {{cd}} into the root directory of the project and run:
>  * {{npm install}}
>  * {{cordova prepare ios --verbose}}
> The plugins will fail to install correctly and the contents of the generated {{plugins/fetch.json}} file is messed up:
> {noformat}
> {
>   "cordova-plugin-whitelist": {
>     "source": {
>       "type": "registry",
>       "id": "cordova-plugin-whitelist@1.3.1"
>     },
>     "is_top_level": true,
>     "variables": {}
>   },
>   "cordova-plugin-splashscreen": {
>     "source": {
>       "type": "registry",
>       "id": "cordova-plugin-customurlscheme@^4.3.0"
>     },
>     "is_top_level": true,
>     "variables": {
>       "URL_SCHEME": "io.cordova.hellocordova"
>     }
>   }
> }
> {noformat}
>  Also, the output of the {{cordova prepare ios --verbose}} makes it quite clear that something went wrong during the installation:
> {noformat}
> ...
> Discovered plugin "cordova-plugin-customurlscheme" in config.xml. Adding it to the project
> No scripts found for hook "before_plugin_add".
> Calling plugman.fetch on plugin "cordova-plugin-customurlscheme@^4.3.0"
> Running command: npm install cordova-plugin-customurlscheme@^4.3.0 --production --no-save
> Command finished with error code 0: npm install,cordova-plugin-customurlscheme@^4.3.0,-production,-no-save
> Copying plugin "/path-to-project/cordova-install-plugin-bug/node_modules/cordova-plugin-splashscreen" => "/path-to-project/cordova-install-plugin-bug/plugins/cordova-plugin-splashscreen"
> Calling plugman.install on plugin "/path-to-project/cordova-install-plugin-bug/plugins/cordova-plugin-splashscreen" for platform "ios
> Plugin "cordova-plugin-splashscreen" already installed on ios.
> ...
> {noformat}
> The installation process seems to mess up the installation of the {{customurlscheme}} plugin with that of the {{splashscreen}} plugin.
> h2. Underlying code issue
> The root of the problem seems to be in the [add.js|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js] {{cordova-lib}} file.
> [Line 97|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L97] prints the {{Calling plugman.fetch on plugin "customurlscheme"}} line, while [line 131|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L131] prints {{Calling plugman.install on plugin "splashscreen"}}.
> This seems to suggest that somewhere between these two lines cordova messes up the plugins somehow.
> The code is somewhat difficult to understand but the root cause seems to be this [pluginInfo|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L52] global variable. Its value is [assigned in the callback of a promise|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L103], read from [another callback of a promise|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L131], while [a whole chain of promises|https://github.com/apache/cordova-lib/blob/81f0a8214aa6dc2811bcb6472f4ce62cb8719024/src/cordova/plugin/add.js#L74] is set using a {{reduce}} function.
> h2. Further information
> Replacing {{"cordova-plugin-splashscreen": "^5.0.1"}} with {{"cordova-plugin-splashscreen": "5.0.1"}} in {{package.json}} makes the {{prepare}} command complete succesfully ([demo branch|https://github.com/vially/cordova-plugin-install-bug-demo/tree/no-fail]). This is a small example of the volatility of the bug.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org