windows.js
 1  module.exports = isexe
 2  isexe.sync = sync
 3  
 4  var fs = require('fs')
 5  
 6  function checkPathExt (path, options) {
 7    var pathext = options.pathExt !== undefined ?
 8      options.pathExt : process.env.PATHEXT
 9  
10    if (!pathext) {
11      return true
12    }
13  
14    pathext = pathext.split(';')
15    if (pathext.indexOf('') !== -1) {
16      return true
17    }
18    for (var i = 0; i < pathext.length; i++) {
19      var p = pathext[i].toLowerCase()
20      if (p && path.substr(-p.length).toLowerCase() === p) {
21        return true
22      }
23    }
24    return false
25  }
26  
27  function checkStat (stat, path, options) {
28    if (!stat.isSymbolicLink() && !stat.isFile()) {
29      return false
30    }
31    return checkPathExt(path, options)
32  }
33  
34  function isexe (path, options, cb) {
35    fs.stat(path, function (er, stat) {
36      cb(er, er ? false : checkStat(stat, path, options))
37    })
38  }
39  
40  function sync (path, options) {
41    return checkStat(fs.statSync(path), path, options)
42  }