pnpm

Форк
0
/
index.ts 
62 строки · 1.3 Кб
1
import type childProcess from 'child_process'
2
import path from 'path'
3
import spawn from 'cross-spawn'
4
import PATH from 'path-name'
5

6
export interface RunNPMOptions {
7
  cwd?: string
8
  env?: Record<string, string>
9
}
10

11
export function runNpm (npmPath: string | undefined, args: string[], options?: RunNPMOptions): childProcess.SpawnSyncReturns<Buffer> {
12
  const npm = npmPath ?? 'npm'
13
  return runScriptSync(npm, args, {
14
    cwd: options?.cwd ?? process.cwd(),
15
    stdio: 'inherit',
16
    userAgent: undefined,
17
    env: { ...options?.env, COREPACK_ENABLE_STRICT: '0' },
18
  })
19
}
20

21
export function runScriptSync (
22
  command: string,
23
  args: string[],
24
  opts: {
25
    cwd: string
26
    stdio: childProcess.StdioOptions
27
    userAgent?: string
28
    env: Record<string, string>
29
  }
30
): childProcess.SpawnSyncReturns<Buffer> {
31
  const env = {
32
    ...createEnv(opts),
33
    ...opts.env,
34
  }
35
  const result = spawn.sync(command, args, {
36
    ...opts,
37
    env,
38
  })
39
  if (result.error) throw result.error
40
  return result
41
}
42

43
function createEnv (
44
  opts: {
45
    cwd: string
46
    userAgent?: string
47
  }
48
): NodeJS.ProcessEnv {
49
  const env = { ...process.env }
50

51
  env[PATH] = [
52
    path.join(opts.cwd, 'node_modules', '.bin'),
53
    path.dirname(process.execPath),
54
    process.env[PATH],
55
  ].join(path.delimiter)
56

57
  if (opts.userAgent) {
58
    env.npm_config_user_agent = opts.userAgent
59
  }
60

61
  return env
62
}
63

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.