UNPKG

autoinst

Version:

Automatically install missing dependencies!

58 lines (50 loc) 1.47 kB
'use strict'; const fs = require('fs'); const path = require('path'); const cp = require('child_process'); const prefix = '[autoinst]'; const { cmd, installer } = (function () { let yarn; try { cp.execSync('yarn --version', { stdio: 'ignore' }); yarn = true; } catch (err) { yarn = false; } return { cmd: yarn ? 'yarn add' : 'npm install', installer: yarn ? '[yarn]' : '[npm]' }; })(); const _require = require; require = function require (dep) { if (!fs.existsSync(module.parent.paths[0])) { fs.mkdirSync(module.parent.paths[0]); } try { module.parent.require(dep); } catch (err) { console.error(`${prefix} ${err.name}: ${err.message}`); console.log(`${prefix} ${installer} installing: '${dep}'`); try { cp.execSync(`${cmd} ${dep}`, { stdio: 'ignore' }); } catch (err) { console.error(`${prefix} ${installer} error: '${dep}'`); console.error(`${prefix} message: ${err.name}: ${err.message}`); console.error(`${prefix} exit code: ${err.status}`); process.exit(); } console.log(`${prefix} ok: '${dep}'`); cp.spawnSync( process.argv[0], [ ...process.argv.slice(1), ...process.execArgv ], { stdio: 'inherit' }); process.exit(); } return module.parent.require(dep); }; Object.keys(_require).forEach(key => { require[key] = typeof _require[key] === 'function' ? _require[key].bind(_require) : _require[key]; }); module.exports = require;