NPM modules propres

Existe-t-il un moyen d’obtenir que npm décompose tous les modules sous node_modules? Quelque chose comme npm rebuild qui supprime tous les artefacts de build mais ne les reconstruit pas?

Vous pouvez simplement supprimer le répertoire node_module

 rm -rf node_modules/ 

Vous pouvez tirer parti de la commande ‘npm cache’ qui télécharge l’archive tar du package et la décompresse dans le répertoire cache npm.

La source peut alors être copiée.

En utilisant des idées tirées de https://groups.google.com/forum/?fromgroups=#!topic/npm-/mwLuZZkHkfU, je suis arrivé avec le script de noeud suivant. Aucune garantie, 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.sortingm(); 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()); 

En un mot non .

En deux, pas encore .

Il y a cependant un problème ouvert pour un indicateur --no-build à npm install pour effectuer une installation sans construire, ce qui pourrait être utilisé pour faire ce que vous demandez.

Voir ce numéro ouvert .

J’ai ajouté ceci à mon package.json:

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

Semble bien fonctionner.