mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-15 11:50:19 -06:00
34 lines
963 B
JavaScript
34 lines
963 B
JavaScript
const fs = require('fs-extra')
|
|
const loadPresetFromDir = require('./loadPresetFromDir')
|
|
|
|
module.exports = async function loadRemotePreset (repository, clone) {
|
|
const os = require('os')
|
|
const path = require('path')
|
|
const download = require('download-git-repo')
|
|
|
|
const presetName = repository
|
|
.replace(/((?:.git)?#.*)/, '')
|
|
.split('/')
|
|
.slice(-1)[0]
|
|
// for direct urls, it's hard to get the correct project name,
|
|
// but we need to at least make sure no special characters remaining
|
|
.replace(/[:#]/g, '')
|
|
|
|
const tmpdir = path.join(os.tmpdir(), 'vue-cli-presets', presetName)
|
|
|
|
// clone will fail if tmpdir already exists
|
|
// https://github.com/flipxfx/download-git-repo/issues/41
|
|
if (clone) {
|
|
await fs.remove(tmpdir)
|
|
}
|
|
|
|
await new Promise((resolve, reject) => {
|
|
download(repository, tmpdir, { clone }, err => {
|
|
if (err) return reject(err)
|
|
resolve()
|
|
})
|
|
})
|
|
|
|
return await loadPresetFromDir(tmpdir)
|
|
}
|