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

Zak updated CB-14133:
---------------------
    Description: 
Relates to CB-13992

The pull request for CB-13992 removed the {{dependency-ls}} package which 
helped to speed up the platform add step. However, each plugin still gets {{npm 
install}} ed seemingly just to determine the package name. 

Typical workflow is to run {{npm install}} as the first task after cloning a 
node repository. The current practice for cordova is to save plugins to the 
package.json meaning that plugins are already installed to the node_modules 
directory, so running {{npm install}} for each of them individually is 
redundant.

If the main function in {{cordova-fetch}} is simplified to just return the path 
to the given module (albeit this isn't the most elegant implementation):

{code:javascript}
module.exports = function (target, dest, opts = {}) {
    var fetchArgs = opts.link ? ['link'] : ['list'];
    var nodeModulesDir = dest + '/node_modules/';

    // check if npm is installed
    return module.exports.isNpmInstalled()
        .then(function () {
            const mod = target.slice(0, target.lastIndexOf('@'));
            return path.resolve(nodeModulesDir, mod)
        })
        .catch(function (err) {
            throw new CordovaError(err);
        });
};
{code}

the platform add process runs almost instantly rather than taking a few minutes.

  was:
Relates to CB-13992

The pull request for CB-13992 removed the `dependency-ls` package which helped 
to speed up the platform add step. However, each plugin still gets `npm 
install`ed seemingly just to determine the package name. 

Typical workflow is to run `npm install` as the first task after cloning a node 
repository. The current practice for cordova is to save plugins to the 
package.json meaning that plugins are already installed to the node_modules 
directory, so running `npm install` for each of them individually is redundant.

If the main function in `cordova-fetch` is simplified to just return the path 
to the given module (albeit this isn't the most elegant implementation):

{code:javascript}
module.exports = function (target, dest, opts = {}) {
    var fetchArgs = opts.link ? ['link'] : ['list'];
    var nodeModulesDir = dest + '/node_modules/';

    // check if npm is installed
    return module.exports.isNpmInstalled()
        .then(function () {
            const mod = target.slice(0, target.lastIndexOf('@'));
            return path.resolve(nodeModulesDir, mod)
        })
        .catch(function (err) {
            throw new CordovaError(err);
        });
};
{code}

the platform add process runs almost instantly rather than taking a few minutes.


> Avoid reinstalling already installed plugins in cordova-fetch
> -------------------------------------------------------------
>
>                 Key: CB-14133
>                 URL: https://issues.apache.org/jira/browse/CB-14133
>             Project: Apache Cordova
>          Issue Type: Wish
>          Components: cordova-cli, cordova-fetch
>    Affects Versions: 8.0.0
>            Reporter: Zak
>            Priority: Minor
>
> Relates to CB-13992
> The pull request for CB-13992 removed the {{dependency-ls}} package which 
> helped to speed up the platform add step. However, each plugin still gets 
> {{npm install}} ed seemingly just to determine the package name. 
> Typical workflow is to run {{npm install}} as the first task after cloning a 
> node repository. The current practice for cordova is to save plugins to the 
> package.json meaning that plugins are already installed to the node_modules 
> directory, so running {{npm install}} for each of them individually is 
> redundant.
> If the main function in {{cordova-fetch}} is simplified to just return the 
> path to the given module (albeit this isn't the most elegant implementation):
> {code:javascript}
> module.exports = function (target, dest, opts = {}) {
>     var fetchArgs = opts.link ? ['link'] : ['list'];
>     var nodeModulesDir = dest + '/node_modules/';
>     // check if npm is installed
>     return module.exports.isNpmInstalled()
>         .then(function () {
>             const mod = target.slice(0, target.lastIndexOf('@'));
>             return path.resolve(nodeModulesDir, mod)
>         })
>         .catch(function (err) {
>             throw new CordovaError(err);
>         });
> };
> {code}
> the platform add process runs almost instantly rather than taking a few 
> minutes.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to