mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-24 11:14:40 +03:00
59e0de7650
* Fix cli no prompt for app-name cli arg * Add change file
208 lines
5.3 KiB
JavaScript
208 lines
5.3 KiB
JavaScript
const parseArgs = require('minimist')
|
|
const inquirer = require('inquirer')
|
|
const { resolve } = require('path')
|
|
const { merge } = require('lodash')
|
|
const {
|
|
recipeShortNames,
|
|
recipeDescriptiveNames,
|
|
recipeByDescriptiveName,
|
|
recipeByShortName
|
|
} = require('../dist/api/recipes')
|
|
|
|
/**
|
|
* @type {object}
|
|
* @property {boolean} h
|
|
* @property {boolean} help
|
|
* @property {string|boolean} f
|
|
* @property {string|boolean} force
|
|
* @property {boolean} l
|
|
* @property {boolean} log
|
|
* @property {boolean} d
|
|
* @property {boolean} directory
|
|
* @property {string} r
|
|
* @property {string} recipe
|
|
*/
|
|
function main(cliArgs) {
|
|
const argv = parseArgs(cliArgs, {
|
|
alias: {
|
|
h: 'help',
|
|
f: 'force',
|
|
l: 'log',
|
|
d: 'directory',
|
|
t: 'tauri-path',
|
|
A: 'app-name',
|
|
W: 'window-title',
|
|
D: 'dist-dir',
|
|
P: 'dev-path',
|
|
r: 'recipe'
|
|
},
|
|
boolean: ['h', 'l', 'ci']
|
|
})
|
|
|
|
if (argv.help) {
|
|
printUsage()
|
|
return 0
|
|
}
|
|
|
|
if (argv.ci) {
|
|
runInit(argv)
|
|
} else {
|
|
getOptionsInteractive(argv).then((responses) => runInit(argv, responses))
|
|
}
|
|
}
|
|
|
|
function printUsage() {
|
|
console.log(`
|
|
Description
|
|
Inits the Tauri template. If Tauri cannot find the tauri.conf.json
|
|
it will create one.
|
|
Usage
|
|
$ tauri create
|
|
Options
|
|
--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
|
|
--recipe, -r Add UI framework recipe. None by default.
|
|
Supported recipes: [${recipeShortNames.join('|')}]
|
|
`)
|
|
}
|
|
|
|
const getOptionsInteractive = (argv) => {
|
|
let defaultAppName = argv.A
|
|
if (!defaultAppName) {
|
|
try {
|
|
const packageJson = JSON.parse(
|
|
readFileSync(resolve(process.cwd(), 'package.json')).toString()
|
|
)
|
|
defaultAppName = packageJson.displayName || packageJson.name
|
|
} catch {}
|
|
}
|
|
|
|
return inquirer
|
|
.prompt([
|
|
{
|
|
type: 'input',
|
|
name: 'appName',
|
|
message: 'What is your app name?',
|
|
default: defaultAppName,
|
|
when: !argv.A
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'tauri.window.title',
|
|
message: 'What should the window title be?',
|
|
default: 'Tauri App',
|
|
when: () => !argv.W
|
|
},
|
|
{
|
|
type: 'list',
|
|
name: 'recipeName',
|
|
message: 'Would you like to add a UI recipe?',
|
|
choices: recipeDescriptiveNames,
|
|
default: 'No recipe',
|
|
when: () => !argv.r
|
|
}
|
|
])
|
|
.then((answers) =>
|
|
inquirer
|
|
.prompt([
|
|
{
|
|
type: 'input',
|
|
name: 'build.devPath',
|
|
message: 'What is the url of your dev server?',
|
|
default: 'http://localhost:4000',
|
|
when: () =>
|
|
(!argv.P && !argv.p && answers.recipeName === 'No recipe') ||
|
|
argv.r === 'none'
|
|
},
|
|
{
|
|
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 && answers.recipeName === 'No recipe') ||
|
|
argv.r === 'none'
|
|
}
|
|
])
|
|
.then((answers2) => ({ ...answers, ...answers2 }))
|
|
)
|
|
.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)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function runInit(argv, config = {}) {
|
|
const { appName, recipeName, ...configOptions } = config
|
|
const init = require('../dist/api/init')
|
|
|
|
let recipe
|
|
let recipeSelection = 'none'
|
|
|
|
if (recipeName !== undefined) {
|
|
recipe = recipeByDescriptiveName(recipeName)
|
|
} else if (argv.r) {
|
|
recipe = recipeByShortName(argv.r)
|
|
}
|
|
|
|
let buildConfig = {
|
|
distDir: argv.D,
|
|
devPath: argv.P
|
|
}
|
|
|
|
if (recipe !== undefined) {
|
|
recipeSelection = recipe.shortName
|
|
buildConfig = recipe.configUpdate(buildConfig)
|
|
}
|
|
|
|
const directory = argv.d || process.cwd()
|
|
|
|
init({
|
|
directory,
|
|
force: argv.f || null,
|
|
logging: argv.l || null,
|
|
tauriPath: argv.t || null,
|
|
appName: appName || argv.A || null,
|
|
customConfig: merge(configOptions, {
|
|
build: buildConfig,
|
|
tauri: {
|
|
window: {
|
|
title: argv.W
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
const { installDependencies } = require('../dist/api/dependency-manager')
|
|
await installDependencies()
|
|
|
|
if (recipe !== undefined) {
|
|
const {
|
|
installRecipeDependencies,
|
|
runRecipePostConfig
|
|
} = require('../dist/api/recipes/install')
|
|
|
|
await installRecipeDependencies(recipe, directory)
|
|
await runRecipePostConfig(recipe, directory)
|
|
}
|
|
}
|
|
|
|
module.exports = main
|