此页面指的是 src/prompts.js
文件,该文件处理安装应用扩展时出现的提示。并非所有应用扩展都需要提示 - 这是一个可选步骤。
用户的答案存储在 /quasar.extensions.json
(项目文件夹的根目录)中,除非您非常清楚自己在做什么,否则不应修改此文件。
文件基本结构示例
// For @quasar/app-vite 1.6+ and @quasar/app-webpack v3.11+
// 1. It can be async
// 2. It receives the "api" param
export default function (api) {
return [
// questions
]
}
您可以在 安装、索引 和 卸载 中访问 api.prompts
(包含您的应用扩展的答案)。
现在让我们关注定义问题的返回数组的结构。以下部分提供了最常用问题类型的示例。
问题格式
警告
以下内容并非对所有可能的问题类型的详尽列表,绝不代表对可用完整 API 的描述。请查看 Inquirer.js 以获取完整信息(Quasar CLI 在后台使用此库)。
字符串
{
// "description" will be the variable
// storing the answer
name: 'description'
type: 'input',
required: false, // optional
message: 'Project description',
default: 'A Quasar Framework app', // optional
}
{
name: 'source_build',
type: 'input',
required: true, // optional
message:
'If you want a separate file to be the source image during production, please specify it here: ',
validate: (input) => {
// ...do something ...
},
default: (answers) => {
return answers.source_dev || defaultImg
}
}
确认
{
// "featureX" will be the variable
// storing the answer
name: 'featureX',
type: 'confirm',
message: 'Use Feature X?',
default: true // optional
}
选项列表
{
// "iconSet" will be the variable
// storing the answer
name: 'iconSet',
type: 'list',
message: 'Choose Icon Set',
choices: [
{
name: 'Material Icons (recommended)',
value: 'material-icons', // value of the answer variable
short: 'Material Icons' // Short name displayed after user picks this
},
{
name: 'Fontawesome v6',
value: 'fontawesome-v6', // value of the answer variable
short: 'Fontawesome v6' // Short name displayed after user picks this
}
// ... all other choices
]
}
API 参数
@quasar/app-vite 1.6+ @quasar/app-webpack 3.11+
兼容性警告
在 @quasar/app-vite v1.6+ 和 @quasar/app-webpack v3.11+ 中引入了 api
参数。
这些 CLI 的旧版本将不会提供任何参数。
api.engine
包含正在使用的 Quasar CLI 引擎(作为字符串)。例如:@quasar/app-vite
或 @quasar/app-webpack
。
api.hasVite
布尔值 - 是否正在运行 @quasar/app-vite
。
api.hasWebpack
布尔值 - 是否正在运行 @quasar/app-webpack
。
api.extId
包含此应用扩展的 ext-id
(字符串)。
api.resolve
解析正在运行此应用扩展的应用程序中的路径。无需导入 path
并自行解析路径。
// resolves to root of app
api.resolve.app('src/my-file.js')
// resolves to root/src of app
api.resolve.src('my-file.js')
// resolves to root/public of app
// (@quasar/app-webpack v3.4+ or @quasar/app-vite v1+)
api.resolve.public('my-image.png')
// resolves to root/src-pwa of app
api.resolve.pwa('some-file.js')
// resolves to root/src-ssr of app
api.resolve.ssr('some-file.js')
// resolves to root/src-cordova of app
api.resolve.cordova('config.xml')
// resolves to root/src-electron of app
api.resolve.electron('some-file.js')
// resolves to root/src-bex of app
api.resolve.bex('some-file.js')
api.appDir
包含正在运行此应用扩展的应用程序根目录的完整路径(字符串)。
api.hasTypescript
/**
* @return {Promise<boolean>} host project has Typescript active or not
*/
await api.hasTypescript()
api.hasLint
/**
* @return {Promise<boolean>} host project has ESLint or not
*/
await api.hasLint()
api.getStorePackageName
/**
* @return {Promise<string|undefined>} 'pinia' | 'vuex' | undefined
*/
await api.getStorePackageName()
api.getNodePackagerName
/**
* @return {Promise<'npm' | 'yarn' | 'pnpm' | 'bun'>}
*/
await api.getNodePackagerName()
api.compatibleWith
确保应用扩展与主机应用程序中通过语义版本条件安装的包兼容。
如果未满足语义版本条件,则 Quasar CLI 会出错并停止执行。
语义版本条件示例:'1.x || >=2.5.0 || 5.0.0 - 7.2.3'
。
/**
* @param {string} packageName
* @param {string} semverCondition
*/
api.compatibleWith(packageName, '1.x')
if (api.hasVite === true) {
api.compatibleWith('@quasar/app-vite', '^2.0.0-beta.1')
}
else {
api.compatbileWith('@quasar/app-webpack', '^4.0.0-beta.1')
}
api.hasPackage
确定主机应用程序中是否通过语义版本条件安装了一些包。
语义版本条件示例:'1.x || >=2.5.0 || 5.0.0 - 7.2.3'
。
/**
* @param {string} packageName
* @param {string} (optional) semverCondition
* @return {boolean} package is installed and meets optional semver condition
*/
if (api.hasPackage('vuelidate')) {
// hey, this app has it (any version of it)
}
if (api.hasPackage('quasar', '^2.0.0')) {
// hey, this app has Quasar UI v2 installed
}
api.hasExtension
检查另一个应用扩展是否已 npm 安装并且 Quasar CLI 是否已调用它。
/**
* Check if another app extension is installed
*
* @param {string} extId
* @return {boolean} has the extension installed & invoked
*/
if (api.hasExtension(extId)) {
// hey, we have it
}
api.getPackageVersion
获取主机应用程序包的版本。
/**
* @param {string} packageName
* @return {string|undefined} version of app's package
*/
console.log( api.getPackageVersion(packageName) )
// output examples:
// 1.1.3
// undefined (when package not found)