为什么捐赠
API 资源管理器
应用扩展提示 API

此页面指的是 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)