Skip to content

Instantly share code, notes, and snippets.

@askdaddy
Created November 1, 2018 12:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save askdaddy/bf41729f6ba4c31c3b7bac5be096fd2b to your computer and use it in GitHub Desktop.
Save askdaddy/bf41729f6ba4c31c3b7bac5be096fd2b to your computer and use it in GitHub Desktop.
hacking npm git.js

Windows 上 通过cygwin 拉取gitlab 私有仓库,因为npm调用git时cygwin目录和系统目录冲突需要修改npm的git.js 位置在全局的node_modules目录,我电脑上的位置是C:\Users\Seven\AppData\Roaming\npm\node_modules\npm\node_modules\pacote\lib\util\git.js

module.exports._exec = execGit
function execGit (gitArgs, gitOpts, opts) {
  opts = optCheck(opts)
+  // hack by seven
+  if (gitArgs) {
+    gitArgs = gitArgs.map(gitArg => gitArg.indexOf('C:\\') === -1 ? gitArg : gitArg.replace(/\\/g, '/').replace(/C\:\//i, '/cygdrive/c/'));
+  }
  return checkGit().then(gitPath => {
    return promiseRetry((retry, number) => {
      if (number !== 1) {
        opts.log.silly('pacote', 'Retrying git command: ' + gitArgs.join(' ') + ' attempt # ' + number)
      }
      return execFileAsync(gitPath, gitArgs, mkOpts(gitOpts, opts)).catch((err) => {
        if (shouldRetry(err)) {
          retry(err)
        } else {
          throw err
        }
      })
    }, opts.retry)
  })
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment