240 votes

Modules NPM propres

Existe-t-il un moyen d'obtenir npm pour décomposer tous les modules sous node_modules ? Quelque chose comme la reconstruction npm qui supprime tous les artefacts de construction mais ne les reconstruit pas ?

199voto

charles Points 2856

Vous pouvez simplement supprimer le répertoire node_module

rm -rf node_modules/

149voto

FDisk Points 2264

Il y a en fait une commande spéciale pour ce travail

npm ci

Il supprimera le répertoire node_modules et installera les paquets en respectant votre fichier package-lock.json

Plus d'infos : https://docs.npmjs.com/cli/ci.html

92voto

lnunno Points 85

J'ai ajouté ceci à mon paquet.json :

"build": "npm build",
"clean": "rm -rf node_modules", 
"reinstall": "npm run clean && npm install", 
"rebuild": "npm run clean && npm install && npm run build",

Ça a l'air de bien marcher.

27voto

jeckep Points 687

Essayez https://github.com/voidcosmos/npkill

npx npkill

il trouvera tous les node_modules et vous permettra de les supprimer.

npkill

9voto

theGecko Points 633

Vous pouvez profiter de la commande 'npm cache' qui télécharge le paquet tarball et le décompose dans le répertoire cache de npm.

La source peut ensuite être copiée dans.

À l'aide d'idées glanées à partir de https://groups.google.com/forum/?fromgroups=# !topic/npm-/mwLuZZkHkfU, j'ai trouvé le script de nœud suivant. Pas de garanties, YMMV, etc.

var fs = require('fs'),
path = require('path'),
exec = require('child_process').exec,
util = require('util');

var packageFileName = 'package.json';
var modulesDirName = 'node_modules';
var cacheDirectory = process.cwd();
var npmCacheAddMask = 'npm cache add %s@%s; echo %s';
var sourceDirMask = '%s/%s/%s/package';
var targetDirMask = '%s/node_modules/%s';

function deleteFolder(folder) {
    if (fs.existsSync(folder)) {
        var files = fs.readdirSync(folder);
        files.forEach(function(file) {
            file = folder + "/" + file;
            if (fs.lstatSync(file).isDirectory()) {
                deleteFolder(file);
            } else {
                fs.unlinkSync(file);
            }
        });
        fs.rmdirSync(folder);
    }
}

function downloadSource(folder) {
    var packageFile = path.join(folder, packageFileName);
    if (fs.existsSync(packageFile)) {
        var data = fs.readFileSync(packageFile);
        var package = JSON.parse(data);

        function getVersion(data) {
            var version = data.match(/-([^-]+)\.tgz/);
            return version[1];
        }

        var callback = function(error, stdout, stderr) {
            var dependency = stdout.trim();
            var version = getVersion(stderr);
            var sourceDir = util.format(sourceDirMask, cacheDirectory, dependency, version);
            var targetDir = util.format(targetDirMask, folder, dependency);
            var modulesDir = folder + '/' + modulesDirName;

            if (!fs.existsSync(modulesDir)) {
                fs.mkdirSync(modulesDir);
            }

            fs.renameSync(sourceDir, targetDir);
            deleteFolder(cacheDirectory + '/' + dependency);
            downloadSource(targetDir);
        };

        for (dependency in package.dependencies) {
            var version = package.dependencies[dependency];
            exec(util.format(npmCacheAddMask, dependency, version, dependency), callback);
        }
    }
}

if (!fs.existsSync(path.join(process.cwd(), packageFileName))) {
    console.log(util.format("Unable to find file '%s'.", packageFileName));
    process.exit();
}

deleteFolder(path.join(process.cwd(), modulesDirName));
process.env.npm_config_cache = cacheDirectory;
downloadSource(process.cwd());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X