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:
Noah Klayman 2020-07-10 09:19:41 -07:00 committed by GitHub
parent f208a68e40
commit ee8724b90a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 485 additions and 641 deletions

View 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.

View File

@ -1,4 +1,16 @@
const parseArgs = require('minimist') 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} * @type {object}
@ -17,9 +29,13 @@ const argv = parseArgs(process.argv.slice(2), {
f: 'force', f: 'force',
l: 'log', l: 'log',
d: 'directory', 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) { if (argv.help) {
@ -30,20 +46,111 @@ if (argv.help) {
Usage Usage
$ tauri init $ tauri init
Options Options
--help, -h Displays this message --help, -h Displays this message
--force, -f Force init to overwrite [conf|template|all] --ci Skip prompts
--log, -l Logging [boolean] --force, -f Force init to overwrite [conf|template|all]
--directory, -d Set target directory for init --log, -l Logging [boolean]
--tauri-path, -t Path of the Tauri project to use (relative to the cwd) --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) 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({ if (argv.ci) {
directory: argv.d || process.cwd(), runInit()
force: argv.f || null, } else {
logging: argv.l || null, inquirer
tauriPath: argv.t || null .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))
}
}

View File

@ -60,6 +60,7 @@
"imagemin-optipng": "8.0.0", "imagemin-optipng": "8.0.0",
"imagemin-pngquant": "9.0.0", "imagemin-pngquant": "9.0.0",
"imagemin-zopfli": "7.0.0", "imagemin-zopfli": "7.0.0",
"inquirer": "^7.3.0",
"is-png": "2.0.0", "is-png": "2.0.0",
"is-reachable": "^4.0.0", "is-reachable": "^4.0.0",
"isbinaryfile": "4.0.6", "isbinaryfile": "4.0.6",

File diff suppressed because it is too large Load Diff