[
https://issues.apache.org/jira/browse/CB-11985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15561677#comment-15561677
]
ASF GitHub Bot commented on CB-11985:
-------------------------------------
Github user vladimir-kotikov commented on a diff in the pull request:
https://github.com/apache/cordova-lib/pull/498#discussion_r82563323
--- Diff: cordova-lib/src/util/npm-helper.js ---
@@ -72,4 +75,53 @@ function restoreSettings() {
}
}
+/**
+ * Fetches the latest version of a package from NPM that matches the
specified version. Returns a promise that
+ * resolves to the directory the NPM package is located in.
+ * @param packageName - name of an npm package
+ * @param packageVersion - requested version or version range
+ */
+function fetchPackage(packageName, packageVersion) {
+ // Get the latest matching version from NPM if a version range is
specified
+ return util.getLatestMatchingNpmVersion(packageName,
packageVersion).then(
+ function (latestVersion) {
+ return cachePackage(packageName, latestVersion);
+ }
+ );
+}
+
+/**
+ * Invokes "npm cache add," and then returns a promise that resolves to a
directory containing the downloaded,
+ * or cached package.
+ * @param packageName - name of an npm package
+ * @param packageVersion - requested version (not a version range)
+ */
+function cachePackage(packageName, packageVersion) {
+ var cacheDir = path.join(util.libDirectory, 'npm_cache');
+
+ // If already cached, use that rather than calling 'npm cache add'
again.
+ var packageCacheDir = path.resolve(cacheDir, packageName,
packageVersion);
--- End diff --
If `packageVersion` is not provided, this will throw the following error:
'TypeError: Path must be a string. Received undefined'. IMO while this is
legitimate error, it probably needs to be wrapped into promise, since this
function return a promised result.
> Cordova hits internet unnecessarily when getting cached platform or plugin
> --------------------------------------------------------------------------
>
> Key: CB-11985
> URL: https://issues.apache.org/jira/browse/CB-11985
> Project: Apache Cordova
> Issue Type: Improvement
> Components: CordovaLib
> Affects Versions: 6.3.1
> Reporter: Tim Barham
> Assignee: Tim Barham
>
> In you are disconnected from the internet and try to add a platform or plugin
> that has previously been cached, Cordova eventually successfully installs the
> platform/plugin, but only after a very long wait.
> We could check for the existence of the cached platform/plugin before calling
> {{npm cache add}}. This would mean an instant return when not connected to
> the internet.
> Note that this will only help if we are adding a specific version - when a
> version range is specified, we need to hit the internet anyway to find the
> matching version.
> Background: First time build failures in Cordova tools in Visual Studio are
> primarily due to {{npm}} failures. Therefore we are working to avoid any
> requirement for {{npm}}} to hit the internet in simple build scenarios. This
> includes pre-installing cached versions of certain platforms and plugins. But
> we only get the full benefit if Cordova uses these cached versions if it
> finds them, without calling {{npm cache add}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]