mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-01 19:44:39 +03:00
feat(tauri.js/init): prompt for default values (fix #422/#162) (#472)
* feat(tauri.js/init): prompt for default values * fix(tauri.js/init): update help wording * feat(tauri.js) prompt for appName on init * feat(tauri.js) add --ci option * chore(changes) add changefile Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
This commit is contained in:
parent
f208a68e40
commit
ee8724b90a
5
.changes/tauri-init-prompt.md
Normal file
5
.changes/tauri-init-prompt.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
"tauri.js": minor
|
||||
---
|
||||
|
||||
`tauri init` now prompt for default values such as window title, app name, dist dir and dev path. You can use `--ci` to skip the prompts.
|
@ -1,4 +1,16 @@
|
||||
const parseArgs = require('minimist')
|
||||
const inquirer = require('inquirer')
|
||||
const {
|
||||
resolve
|
||||
} = require('path')
|
||||
const {
|
||||
readFileSync,
|
||||
writeFileSync
|
||||
} = require('fs')
|
||||
const {
|
||||
merge
|
||||
} = require('lodash')
|
||||
const toml = require('@tauri-apps/toml')
|
||||
|
||||
/**
|
||||
* @type {object}
|
||||
@ -17,9 +29,13 @@ const argv = parseArgs(process.argv.slice(2), {
|
||||
f: 'force',
|
||||
l: 'log',
|
||||
d: 'directory',
|
||||
t: 'tauri-path'
|
||||
t: 'tauri-path',
|
||||
A: 'app-name',
|
||||
W: 'window-title',
|
||||
D: 'dist-dir',
|
||||
P: 'dev-path'
|
||||
},
|
||||
boolean: ['h', 'l']
|
||||
boolean: ['h', 'l', 'ci']
|
||||
})
|
||||
|
||||
if (argv.help) {
|
||||
@ -30,20 +46,111 @@ if (argv.help) {
|
||||
Usage
|
||||
$ tauri init
|
||||
Options
|
||||
--help, -h Displays this message
|
||||
--force, -f Force init to overwrite [conf|template|all]
|
||||
--log, -l Logging [boolean]
|
||||
--directory, -d Set target directory for init
|
||||
--tauri-path, -t Path of the Tauri project to use (relative to the cwd)
|
||||
--help, -h Displays this message
|
||||
--ci Skip prompts
|
||||
--force, -f Force init to overwrite [conf|template|all]
|
||||
--log, -l Logging [boolean]
|
||||
--directory, -d Set target directory for init
|
||||
--tauri-path, -t Path of the Tauri project to use (relative to the cwd)
|
||||
--app-name, -A Name of your Tauri application
|
||||
--window-title, -W Window title of your Tauri application
|
||||
--dist-dir, -D Web assets location, relative to <project-dir>/src-tauri
|
||||
--dev-path, -P Url of your dev server
|
||||
`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
const init = require('../dist/api/init')
|
||||
let appName = argv.A
|
||||
if (!appName) {
|
||||
try {
|
||||
const packageJson = JSON.parse(readFileSync(resolve(process.cwd(), 'package.json')).toString())
|
||||
appName = packageJson.displayName || packageJson.name
|
||||
} catch {}
|
||||
}
|
||||
|
||||
init({
|
||||
directory: argv.d || process.cwd(),
|
||||
force: argv.f || null,
|
||||
logging: argv.l || null,
|
||||
tauriPath: argv.t || null
|
||||
})
|
||||
if (argv.ci) {
|
||||
runInit()
|
||||
} else {
|
||||
inquirer
|
||||
.prompt([{
|
||||
type: 'input',
|
||||
name: 'appName',
|
||||
message: 'What is your app name?',
|
||||
default: appName
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'tauri.window.title',
|
||||
message: 'What should the window title be?',
|
||||
default: 'Tauri App',
|
||||
when: () => !argv.W
|
||||
},
|
||||
{
|
||||
type: 'input',
|
||||
name: 'build.distDir',
|
||||
message: 'Where are your web assets (HTML/CSS/JS) located, relative to the "<current dir>/src-tauri" folder that will be created?',
|
||||
default: '../dist',
|
||||
when: () => !argv.D
|
||||
},
|
||||
{
|
||||
type: 'input',
|
||||
name: 'build.devPath',
|
||||
message: 'What is the url of your dev server?',
|
||||
default: 'http://localhost:4000',
|
||||
when: () => !argv.P
|
||||
}
|
||||
])
|
||||
.then(answers => {
|
||||
runInit(answers)
|
||||
})
|
||||
.catch(error => {
|
||||
if (error.isTtyError) {
|
||||
// Prompt couldn't be rendered in the current environment
|
||||
console.log(
|
||||
'It appears your terminal does not support interactive prompts. Using default values.'
|
||||
)
|
||||
runInit()
|
||||
} else {
|
||||
// Something else when wrong
|
||||
console.error('An unknown error occurred:', error)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function runInit(config = {}) {
|
||||
const {
|
||||
appName,
|
||||
...configOptions
|
||||
} = config
|
||||
const init = require('../dist/api/init')
|
||||
|
||||
const directory = argv.d || process.cwd()
|
||||
init({
|
||||
directory,
|
||||
force: argv.f || null,
|
||||
logging: argv.l || null,
|
||||
tauriPath: argv.t || null,
|
||||
customConfig: merge(configOptions, {
|
||||
build: {
|
||||
distDir: argv.D,
|
||||
devPath: argv.p
|
||||
},
|
||||
tauri: {
|
||||
window: {
|
||||
title: argv.w
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (appName || argv.A) {
|
||||
const manifestPath = resolve(directory, 'src-tauri/Cargo.toml')
|
||||
const cargoManifest = toml.parse(readFileSync(manifestPath).toString())
|
||||
let binName = (appName || argv.A).replace(/ /g, '-')
|
||||
cargoManifest.package.name = binName
|
||||
cargoManifest.package['default-run'] = binName
|
||||
if (cargoManifest.bin && cargoManifest.bin.length) {
|
||||
cargoManifest.bin[0].name = binName
|
||||
}
|
||||
writeFileSync(manifestPath, toml.stringify(cargoManifest))
|
||||
}
|
||||
}
|
||||
|
@ -60,6 +60,7 @@
|
||||
"imagemin-optipng": "8.0.0",
|
||||
"imagemin-pngquant": "9.0.0",
|
||||
"imagemin-zopfli": "7.0.0",
|
||||
"inquirer": "^7.3.0",
|
||||
"is-png": "2.0.0",
|
||||
"is-reachable": "^4.0.0",
|
||||
"isbinaryfile": "4.0.6",
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user