create ".envrc" for nvm or nodebrew
jq && direnv && (nvm || nodebrew)
npx https://gist.github.com/hMatoba/f13f91813e66c1d11d4246902a7f05f7
{"name": "noman", "version": "0.0.1", "bin": "./set.js"} |
#!/usr/bin/env node | |
const spawnSync = require('child_process').spawnSync; | |
const process = require('process'); | |
const fs = require('fs'); | |
const hasNvm = () => { | |
const result = spawnSync('nvm', ['--version']); | |
return !!result.error; | |
}; | |
const hasNodebrew = () => { | |
const result = spawnSync('nodebrew', ['help']); | |
return !!result.error; | |
}; | |
const contentNvmrc = ` | |
nvmrc=~/.nvm/nvm.sh | |
source $nvmrc | |
NODE_VER=$(cat package.json | jq -r ".engines.node") | |
nvm use $NODE_VER | |
`; | |
const contentNodebrew = ` | |
NODE_VER=$(cat package.json | jq -r ".engines.node") | |
nodebrew use $NODE_VER | |
`; | |
const pathEnvrc = './.envrc' | |
const existsEnvrc = () => { | |
try { | |
fs.statSync(pathEnvrc); | |
return true; | |
} catch (error) { | |
if (error.code === 'ENOENT') { | |
return false; | |
} else { | |
console.error(error); | |
process.exit(1); | |
} | |
} | |
}; | |
// processing ----------------------------------------------------------------- | |
if (existsEnvrc()) { | |
console.log('exists ".envrc".'); | |
process.exit(1); | |
} | |
if (hasNvm()) { | |
fs.writeFileSync(pathEnvrc, contentNvmrc); | |
console.log('execute "direnv allow && direnv reload"'); | |
process.exit(); | |
} | |
if (hasNodebrew()) { | |
fs.writeFileSync(pathEnvrc, contentNodebrew); | |
console.log('execute "direnv allow && direnv reload"'); | |
process.exit(); | |
} | |
console.error('install "nvm" or "nodebrew".'); | |
process.exit(1); |