#!/usr/bin/env node var resolveModule = require('resolve').sync; var resolvePath = require('path').resolve; var readFileSync = require('fs').readFileSync; var parseOpts = require('minimist'); var glob = require('glob'); var ignore = require('dotignore'); var opts = parseOpts(process.argv.slice(2), { alias: { r: 'require', i: 'ignore' }, string: ['require', 'ignore'], default: { r: [], i: null } }); var cwd = process.cwd(); if (typeof opts.require === 'string') { opts.require = [opts.require]; } opts.require.forEach(function (module) { if (module) { /* This check ensures we ignore `-r ""`, trailing `-r`, or * other silly things the user might (inadvertently) be doing. */ require(resolveModule(module, { basedir: cwd })); } }); if (typeof opts.ignore === 'string') { try { var ignoreStr = readFileSync(resolvePath(cwd, opts.ignore || '.gitignore'), 'utf-8'); } catch (e) { console.error(e.message); process.exit(2); } var matcher = ignore.createMatcher(ignoreStr); } opts._.forEach(function (arg) { // If glob does not match, `files` will be an empty array. // Note: `glob.sync` may throw an error and crash the node process. var files = glob.sync(arg); if (!Array.isArray(files)) { throw new TypeError('unknown error: glob.sync did not return an array or throw. Please report this.'); } files.filter(function (file) { return !matcher || !matcher.shouldIgnore(file); }).forEach(function (file) { require(resolvePath(cwd, file)); }); }); // vim: ft=javascript