first commit
This commit is contained in:
218
app_vue/node_modules/@vue/cli-shared-utils/lib/env.js
generated
vendored
Normal file
218
app_vue/node_modules/@vue/cli-shared-utils/lib/env.js
generated
vendored
Normal file
@ -0,0 +1,218 @@
|
||||
const { execSync } = require('child_process')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const LRU = require('lru-cache')
|
||||
const semver = require('semver')
|
||||
|
||||
let _hasYarn
|
||||
const _yarnProjects = new LRU({
|
||||
max: 10,
|
||||
maxAge: 1000
|
||||
})
|
||||
let _hasGit
|
||||
const _gitProjects = new LRU({
|
||||
max: 10,
|
||||
maxAge: 1000
|
||||
})
|
||||
|
||||
// env detection
|
||||
exports.hasYarn = () => {
|
||||
if (process.env.VUE_CLI_TEST) {
|
||||
return true
|
||||
}
|
||||
if (_hasYarn != null) {
|
||||
return _hasYarn
|
||||
}
|
||||
try {
|
||||
execSync('yarn --version', { stdio: 'ignore' })
|
||||
return (_hasYarn = true)
|
||||
} catch (e) {
|
||||
return (_hasYarn = false)
|
||||
}
|
||||
}
|
||||
|
||||
exports.hasProjectYarn = (cwd) => {
|
||||
if (_yarnProjects.has(cwd)) {
|
||||
return checkYarn(_yarnProjects.get(cwd))
|
||||
}
|
||||
|
||||
const lockFile = path.join(cwd, 'yarn.lock')
|
||||
const result = fs.existsSync(lockFile)
|
||||
_yarnProjects.set(cwd, result)
|
||||
return checkYarn(result)
|
||||
}
|
||||
|
||||
function checkYarn (result) {
|
||||
if (result && !exports.hasYarn()) throw new Error(`The project seems to require yarn but it's not installed.`)
|
||||
return result
|
||||
}
|
||||
|
||||
exports.hasGit = () => {
|
||||
if (process.env.VUE_CLI_TEST) {
|
||||
return true
|
||||
}
|
||||
if (_hasGit != null) {
|
||||
return _hasGit
|
||||
}
|
||||
try {
|
||||
execSync('git --version', { stdio: 'ignore' })
|
||||
return (_hasGit = true)
|
||||
} catch (e) {
|
||||
return (_hasGit = false)
|
||||
}
|
||||
}
|
||||
|
||||
exports.hasProjectGit = (cwd) => {
|
||||
if (_gitProjects.has(cwd)) {
|
||||
return _gitProjects.get(cwd)
|
||||
}
|
||||
|
||||
let result
|
||||
try {
|
||||
execSync('git status', { stdio: 'ignore', cwd })
|
||||
result = true
|
||||
} catch (e) {
|
||||
result = false
|
||||
}
|
||||
_gitProjects.set(cwd, result)
|
||||
return result
|
||||
}
|
||||
|
||||
let _hasPnpm
|
||||
let _pnpmVersion
|
||||
const _pnpmProjects = new LRU({
|
||||
max: 10,
|
||||
maxAge: 1000
|
||||
})
|
||||
|
||||
function getPnpmVersion () {
|
||||
if (_pnpmVersion != null) {
|
||||
return _pnpmVersion
|
||||
}
|
||||
try {
|
||||
_pnpmVersion = execSync('pnpm --version', {
|
||||
stdio: ['pipe', 'pipe', 'ignore']
|
||||
}).toString()
|
||||
// there's a critical bug in pnpm 2
|
||||
// https://github.com/pnpm/pnpm/issues/1678#issuecomment-469981972
|
||||
// so we only support pnpm >= 3.0.0
|
||||
_hasPnpm = true
|
||||
} catch (e) {}
|
||||
return _pnpmVersion || '0.0.0'
|
||||
}
|
||||
|
||||
exports.hasPnpmVersionOrLater = (version) => {
|
||||
if (process.env.VUE_CLI_TEST) {
|
||||
return true
|
||||
}
|
||||
return semver.gte(getPnpmVersion(), version)
|
||||
}
|
||||
|
||||
exports.hasPnpm3OrLater = () => {
|
||||
return this.hasPnpmVersionOrLater('3.0.0')
|
||||
}
|
||||
|
||||
exports.hasProjectPnpm = (cwd) => {
|
||||
if (_pnpmProjects.has(cwd)) {
|
||||
return checkPnpm(_pnpmProjects.get(cwd))
|
||||
}
|
||||
|
||||
const lockFile = path.join(cwd, 'pnpm-lock.yaml')
|
||||
const result = fs.existsSync(lockFile)
|
||||
_pnpmProjects.set(cwd, result)
|
||||
return checkPnpm(result)
|
||||
}
|
||||
|
||||
function checkPnpm (result) {
|
||||
if (result && !exports.hasPnpm3OrLater()) {
|
||||
throw new Error(`The project seems to require pnpm${_hasPnpm ? ' >= 3' : ''} but it's not installed.`)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
const _npmProjects = new LRU({
|
||||
max: 10,
|
||||
maxAge: 1000
|
||||
})
|
||||
exports.hasProjectNpm = (cwd) => {
|
||||
if (_npmProjects.has(cwd)) {
|
||||
return _npmProjects.get(cwd)
|
||||
}
|
||||
|
||||
const lockFile = path.join(cwd, 'package-lock.json')
|
||||
const result = fs.existsSync(lockFile)
|
||||
_npmProjects.set(cwd, result)
|
||||
return result
|
||||
}
|
||||
|
||||
// OS
|
||||
exports.isWindows = process.platform === 'win32'
|
||||
exports.isMacintosh = process.platform === 'darwin'
|
||||
exports.isLinux = process.platform === 'linux'
|
||||
|
||||
const browsers = {}
|
||||
let hasCheckedBrowsers = false
|
||||
|
||||
function tryRun (cmd) {
|
||||
try {
|
||||
return execSync(cmd, {
|
||||
stdio: [0, 'pipe', 'ignore'],
|
||||
timeout: 10000
|
||||
}).toString().trim()
|
||||
} catch (e) {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
function getLinuxAppVersion (binary) {
|
||||
return tryRun(`${binary} --version`).replace(/^.* ([^ ]*)/g, '$1')
|
||||
}
|
||||
|
||||
function getMacAppVersion (bundleIdentifier) {
|
||||
const bundlePath = tryRun(`mdfind "kMDItemCFBundleIdentifier=='${bundleIdentifier}'"`)
|
||||
|
||||
if (bundlePath) {
|
||||
return tryRun(`/usr/libexec/PlistBuddy -c Print:CFBundleShortVersionString ${
|
||||
bundlePath.replace(/(\s)/g, '\\ ')
|
||||
}/Contents/Info.plist`)
|
||||
}
|
||||
}
|
||||
|
||||
exports.getInstalledBrowsers = () => {
|
||||
if (hasCheckedBrowsers) {
|
||||
return browsers
|
||||
}
|
||||
hasCheckedBrowsers = true
|
||||
|
||||
if (exports.isLinux) {
|
||||
browsers.chrome = getLinuxAppVersion('google-chrome')
|
||||
browsers.firefox = getLinuxAppVersion('firefox')
|
||||
} else if (exports.isMacintosh) {
|
||||
browsers.chrome = getMacAppVersion('com.google.Chrome')
|
||||
browsers.firefox = getMacAppVersion('org.mozilla.firefox')
|
||||
} else if (exports.isWindows) {
|
||||
// get chrome stable version
|
||||
// https://stackoverflow.com/a/51773107/2302258
|
||||
const chromeQueryResult = tryRun(
|
||||
'reg query "HKLM\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32'
|
||||
) || tryRun(
|
||||
'reg query "HKCU\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32'
|
||||
)
|
||||
if (chromeQueryResult) {
|
||||
const matched = chromeQueryResult.match(/REG_SZ\s+(\S*)$/)
|
||||
browsers.chrome = matched && matched[1]
|
||||
}
|
||||
|
||||
// get firefox version
|
||||
// https://community.spiceworks.com/topic/111518-how-to-determine-version-of-installed-firefox-in-windows-batchscript
|
||||
const ffQueryResult = tryRun(
|
||||
'reg query "HKLM\\Software\\Mozilla\\Mozilla Firefox" /v CurrentVersion'
|
||||
)
|
||||
if (ffQueryResult) {
|
||||
const matched = ffQueryResult.match(/REG_SZ\s+(\S*)$/)
|
||||
browsers.firefox = matched && matched[1]
|
||||
}
|
||||
}
|
||||
|
||||
return browsers
|
||||
}
|
Reference in New Issue
Block a user