Three existing fetching implementations.
Platform Fetching
Plugin Fetching
a) cordova plugin fetching - plugin.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L147 - fetch.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/fetch.js - registry.fetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/registry/registry.js#L123 b) plugman plugin fetching - install.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/install.js - possiblyFetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/install.js#L104 - fetch.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/fetch.js - registry.fetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/registry/registry.js#L123
Template Fetching
Both lazy load and remote load use gitclone.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/gitclone.js
Currently, platforms and templates are cached at ~/.cordova/lib/npm_cache/PACKAGE
. On master, plugins are being cached to ~/.npm/PACKAGE
.
cordova-fetch
. Fetches from npm and git.npm
instead of packaging our own npm
in cordoba-lib
. We already check for git
being installed, we should do the same for npm
. We would use superspawn
to shell out to the system npm
..cordova/lib/npm_cache/
. Modules instead get fetched to root node_modules
directory in your applications--fetch
flag to cordova
and plugman
to use cordova-fetch
over existing fetching methodsnpm uninstall
on your cordova projects to remove the module from the apps node_modules
directory.package.json
exists, adding --save
will also add the dependency to package.json
(as well as to config.xml
). This won't be used until a future update is made to move save functionality from config.xml
to package.json
. Just adding it now for future proofing.--fetch
flag to cordova create APPID --template TEMPLATEID/GITURL
to use cordova-fetch when getting the template. The template is fetched to .cordova/node_modules/
directory and the appropriate files are added.package.json
npm ls
to determine which module was just installed. This is because the user can pass in a git url as a target to cordova-fetch
. If the git url repo-name is different than the package.name
, only way to get what module was just installed is by doing a diff before and after the installation. The diffing technique can fail if the user is adding a module that has already been npm installed. Luckily cordova doesn't allow adding platform/plugin which has already been added. cordova platform/plugin rm will also remove the module from the applications node_modules
directory.cordova
to start using package.json
as well as config.xml
. This requires moving over some functionality from config.xml
and updating tools to look in package.json
before checking config.xml
.Issues: https://issues.apache.org/jira/browse/CB-9858 & https://issues.apache.org/jira/browse/CB-11349