mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-27 00:08:53 -05:00
39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
const path = require('path')
|
|
const fs = require('fs')
|
|
|
|
const platform = process.platform === 'win32'
|
|
? 'win'
|
|
: process.platform === 'darwin'
|
|
? 'macos'
|
|
: process.platform
|
|
const arch = platform === 'win' && process.arch === 'ia32' ? 'x86' : process.arch
|
|
|
|
const pkgName = `@pnpm/${platform}-${arch}`
|
|
const pkgJson = require.resolve(`${pkgName}/package.json`)
|
|
const subpkg = JSON.parse(fs.readFileSync(pkgJson, 'utf8'))
|
|
|
|
if (subpkg.bin != null) {
|
|
const executable = subpkg.bin.pnpm
|
|
const bin = path.resolve(path.dirname(pkgJson), executable)
|
|
|
|
linkSync(bin, path.resolve(process.cwd(), executable))
|
|
|
|
if (platform === 'win') {
|
|
const pkg = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), 'package.json'), 'utf8'))
|
|
fs.writeFileSync(path.resolve(process.cwd(), 'pnpm'), 'This file intentionally left blank')
|
|
pkg.bin.pnpm = 'pnpm.exe'
|
|
fs.writeFileSync(path.resolve(process.cwd(), 'package.json'), JSON.stringify(pkg, null, 2))
|
|
}
|
|
}
|
|
|
|
function linkSync(src, dest) {
|
|
try {
|
|
fs.unlinkSync(dest)
|
|
} catch (e) {
|
|
if (e.code !== 'ENOENT') {
|
|
throw e
|
|
}
|
|
}
|
|
return fs.linkSync(src, dest)
|
|
}
|