2017-02-07 2 views
0

Я использую команду «npm oudated», единственная проблема заключается в том, что она немного медленная, потому что она фактически вычисляет последнюю версию пакетов npm.Как я могу использовать NPM для локального проверки пакетов, только то, что вам нужно. Не пытаться получить последнюю версию

В идеале я просто хочу знать, есть ли недостающий пакет локально и запустить npm install, если есть недостающие пакеты.

Я создал этот скрипт как gitook после проверки, есть ли лучший способ проверить, отсутствуют ли у вас пакеты, которые находятся в вашем пакете. Json?

#!/usr/bin/env node 

var exec = require('child_process').exec, 
    missingPackage = false; 

return new Promise((resolve) => { 
     exec('npm outdated --json', (error, stdout, stderr) => { 
      resolve(JSON.parse(stdout)); 
     }) 
    }) 
    .then((packageJson) => { 
     for (const x of Object.keys(packageJson)) { 
      if (packageJson[x].location === '') { 
       missingPackage = true; 
      } 
     } 
    }) 
    .then(() => { 
     if (missingPackage) { 
      console.log('\nHello, you are missing some packages so we are going to install them....'); 
      exec('npm install', (error, stdout, stderr) => { 
       console.log(stdout); 
      }) 
     } 
    }) 

ответ

0

Я ничего не видел в документации по НПМ, поэтому я просто создал это. Занимает менее секунды, чтобы проверить, отсутствуют ли вам пакеты

#!/usr/bin/env node 

const exec = require('child_process').exec, 
    fs = require('fs'), 
    packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')), 
    dependenciesPackages = Object.keys(packageJson.dependencies), 
    devDependenciesPackages = Object.keys(packageJson.devDependencies), 
    allNpmPackages = dependenciesPackages.concat(devDependenciesPackages); 

// Checking if any packages are missing 
return new Promise((resolve) => { 
    for (const [idx, npmPackage] of allNpmPackages.entries()) { 
     fs.readFile(`node_modules/${npmPackage}/package.json`, 'utf8', function(err) { 
      if (err && err.code === 'ENOENT') { 
       resolve(true); 
      } else if (idx === allNpmPackages.length - 1) { 
       resolve(false); 
      } 
     }); 
    } 
}) 
// If packages are missing then run npm install 
.then((isMissingPackages) => { 
    if (isMissingPackages) { 
     console.log('\nHello, you are missing some packages so we are going to install them....'); // eslint-disable-line no-console 
     exec('npm install', (error, stdout) => { 
      console.log(stdout); // eslint-disable-line no-console 
     }); 
    } 
}); 
Смежные вопросы