Quasar在它的引擎下使用了一些很棒的开发工具,比如Webpack。 Quasar的一大优点是它可以为您处理底层工具所需的大多数复杂配置。 因此,您甚至无需了解Webpack或任何其他开发工具即可使用Quasar。
那么你可以通过/quasar.config.js
来配置什么?
- 您将在您的网站/应用程序中使用的Quasar组件、指令和插件
- 默认的Quasar语言包
- 你想使用的图标库
- Quasar组件的默认的Quasar图标集
- 开发服务器端口、HTTPS模式、主机名等
- 你想使用的CSS动画
- 启动文件 列表(也决定了执行顺序) - 这是
/src/boot
中的文件,告诉你在安装根Vue组件之前如何初始化应用程序 - bundle中包含的全局CSS/Sass/…文件
- PWA manifest 和 Workbox选项
- Electron打包器 和/或 Electron构建器
- 扩展的Webpack配置
TIP
您会注意到,更改任何这些设置不需要您手动重新加载开发服务器。 Quasar检测是否可以通过热模块更换 注入更改,如果不能,则会自动重新加载开发服务器。 您不会丢失开发流程,因为您只需坐等Quasar CLI快速重新加载更改的代码,甚至保持当前状态。 这节省了大量的时间!
WARNING
/quasar.config.js
由Quasar CLI构建系统运行,因此这些配置代码直接在Node下运行,而不是在应用程序的上下文中运行。这意味着你可以导入像’fs’,‘path’,'webpack’等模块。确保您在此文件编写的ES6功能受安装的Node版本(应该>=8.9.0)支持。
结构
基础
您会注意到/quasar.config.js
会导出一个函数,该函数接受ctx
(context)参数并返回一个对象。这使您可以根据此上下文动态更改您的网站/应用配置:
module.exports = function (ctx) { // 也可以是异步的
console.log(ctx)
// 输出到控制台的例子:
{
dev: true,
prod: false,
mode: { spa: true },
modeName: 'spa',
target: {},
targetName: undefined,
arch: {},
archName: undefined,
debug: undefined
}
// 根据这些参数上下文将会被创建
// 当你运行"quasar dev"或"quasar build"时
}
这意味着,作为一个例子,您可以在构建特定模式(如PWA)时加载字体,并为其他模式选择另一个:
module.exports = function (ctx) {
extras: [
ctx.mode.pwa // we're adding only if working on a PWA
? 'roboto-font'
: null
]
}
或者,您可以使用一个全局CSS文件用于SPA模式,使用另一个用于Cordova模式,同时避免为其他模式加载任何此类文件。
module.exports = function (ctx) {
css: [
ctx.mode.spa ? 'app-spa.sass' : null, // looks for /src/css/app-spa.sass
ctx.mode.cordova ? 'app-cordova.sass' : null // looks for /src/css/app-cordova.sass
]
}
或者,您可以将开发服务器配置为在端口8000上运行SPA模式,在端口9000上运行PWA模式或在端口9090上运行其他模式:
module.exports = function (ctx) {
devServer: {
port: ctx.mode.spa
? 8000
: (ctx.mode.pwa ? 9000 : 9090)
}
}
您也可以在返回Quasar配置之前执行异步工作:
module.exports = async function (ctx) {
const data = await someAsyncFunction()
return {
// ... use "data"
}
}
// or:
module.exports = function (ctx) {
return new Promise(resolve => {
// some async work then:
// resolve() with the quasar config
resolve({
//
})
})
}
可能性是无止境的。
IDE autocompletion
可以用configure()
助手包装返回的函数,以获得更好的IDE自动完成体验(通过Typescript):
const { configure } = require('quasar/wrappers')
module.exports = configure(function (ctx) {
/* configuration options */
})
配置选项
让我们逐个采取每个选项:
属性 | 类型 | 描述 |
---|---|---|
css | Array | 来自/src/css/的全局CSS/Sass/…文件,默认包含的主题文件除外。 |
preFetch | Boolean | 启用PreFetch功能. |
extras | Array | 从@quasar/extras包中导入什么内容。 例: [‘material-icons’, ‘roboto-font’, ‘ionicons-v4’] |
vendor | Object | 向vendor块添加/删除文件/第三方库: { add: […], remove: […] }. |
supportTS | Boolean/Object | 增加TypeScript支持. 更多信息 |
htmlVariables | Object | 添加可在index.template.html中使用的变量。 |
framework | Object/String | 导入哪个Quasar组件/指令/插件,选择哪个Quasar语言包,使用Quasar组件的哪个Quasar图标集。 |
animations | Object/String | 导入哪个CSS动画。 例: [‘bounceInLeft’, ‘bounceOutRight’] |
devServer | Object | Webpack devServer选项。 根据您使用的Quasar模式覆盖某些属性,以确保正确的配置。注意:如果您要代理开发服务器(即使用云IDE),请将“public”设置为你的公共应用程序URL。 |
build | Object | 构建配置。 |
sourceFiles | Object | 更改应用部分的默认名称. |
cordova | Object | Cordova特定配置。 |
capacitor | Object | Quasar CLI Capacitor特定配置。 |
pwa | Object | PWA特定配置。 |
ssr | Object | SSR特定配置. |
electron | Object | Electron特定配置。 |
属性:css
来自/src/css/
的全局CSS/Sass/…文件,默认包含的主题文件除外。
// quasar.config.js
return {
css: [
'app.sass', // referring to /src/css/app.sass
'~some-library/style.css' // referring to node_modules/some-library/style.css
]
}
属性:vendor
默认情况下,出于性能和缓存原因,来自node_modules
的所有内容都将注入到vendor块中。 但是,如果您希望在此特殊块中添加或删除某些内容,您可以这样做:
// quasar.config.js
return {
vendor: {
/* 可选的;
禁用vendor块: */ disable: true,
add: [ 'src/plugins/my-special-plugin' ],
remove: ['axios', 'vue$']
}
}
属性:framework
告诉CLI要导入的Quasar组件/指令/插件,要使用的Quasar I18n语言包,用于Quasar组件的图标集等等。
只有当“all”设置为false
时,才需要填充“components”和“directions”。
// quasar.config.js
return {
// a list with all options (all are optional)
framework: {
// is using "auto" import strategy, you can also configure:
autoImportComponentCase: 'pascal', // or 'kebab' (default) or 'combined'
// For special cases outside of where auto-import can have an impact
// (example: vue components written in .js files instead of .vue),
// you can manually specify Quasar components/directives to be available everywhere:
//
// components: [],
// directives: [],
// Quasar plugins
plugins: ['Notify' /* ... */],
// Quasar config
// You'll see this mentioned for components/directives/plugins which use it
config: { /* ... */ },
iconSet: 'fontawesome-v6', // requires icon library to be specified in "extras" section too,
lang: 'de', // Tell Quasar which language pack to use for its own components
cssAddon: true // Adds the flex responsive++ CSS classes (noticeable bump in footprint)
}
}
更多关于cssAddon参考这里.
属性:devServer
Webpack devServer 选项. 看看完整列表的选项(在写这篇文章的时候,Webpack团队还没有更新webpack-dev-server v4的网站。)。 有些被Quasar CLI根据“Quasar dev”参数和Quasar模式覆盖,以确保正确的设置。 注意:如果您要代理开发服务器(即使用云IDE),请将“public”设置为公共应用程序URL。
大多数使用的属性是:
属性 | 类型 | 描述 |
---|---|---|
port | Number | dev server端口 |
host | String | dev server使用的本地IP/主机名 |
open | Boolean/String | 除非将其设置为“false”,否则Quasar将打开一个自动指向开发服务器地址的浏览器。 适用于SPA,PWA和SSR模式。 如果指定String,请参阅下面的说明。 |
proxy | Object/Array | 当你有一个独立的API后端开发服务器,而你想在同一个域名上发送API请求时,代理一些URL会很有用。 |
devMiddleware | Object | 提供给webpack-dev-middleware v4的配置 |
https | Boolean/Object | 使用HTTPS而不是HTTP |
onBeforeSetupMiddleware | Function | 在webpack-dev-server应用自己的配置之前配置开发中间件。 |
onAfterSetupMiddleware | Function | 在webpack-dev-server应用自己的配置后配置开发中间件。 |
使用open
属性打开特定浏览器,而不是使用操作系统的默认浏览器(基于主机操作系统检查支持的值):
// quasar.config.js
// (syntax below requires @quasar/app-webpack v3.3+)
// opens Google Chrome
devServer: {
open: {
app: { name: 'google chrome' }
}
}
// opens Firefox
devServer: {
open: {
app: { name: 'firefox' }
}
}
// opens Google Chrome and automatically deals with cross-platform issues:
const open = require('open')
devServer: {
open: {
app: { name: open.apps.chrome }
}
}
在quasar.config.js文件中设置devServer > https: true
时,Quasar会自动为您生成SSL证书。 但是,如果您想自己为本地主机创建一个,请查看Filippo的博客文章。 然后你的quasar.config.js > devServer > https
应该看起来像这样:
// quasar.config.js
devServer: {
server: {
type: 'https', // NECESSARY (alternative is type 'http')
options: {
// Use ABSOLUTE paths or path.join(__dirname, 'root/relative/path')
key: "/path/to/server.key",
pfx: "/path/to/server.pfx",
cert: "/path/to/server.crt",
ca: "/path/to/ca.pem",
passphrase: 'webpack-dev-server' // do you need it?
}
}
}
您还可以配置自动打开远程Vue Devtools:
// quasar.config.js
devServer: {
vueDevtools: true
}
HRM的Docker和WSL问题
如果您正在使用Docker容器,您可能会发现HMR停止工作。HMR依赖于操作系统来提供有关更改的文件的通知,这些文件可能不适用于Docker容器。您可以通过添加以下内容将其更改为轮询:
一个权宜之计可以通过使用轮询模式来检查文件系统的变化来实现。 这可以通过以下方式启用:
// quasar.config.js
build: {
// ...
extendWebpack(cfg) {
cfg.watchOptions = {
aggregateTimeout: 200,
poll: 1000,
};
},
// ...
属性:build
属性 | 类型 | 描述 |
---|---|---|
transpile | Boolean | 启用或禁用Babel transpiling. |
transpileDependencies | Array of Regex | 如果“transpile”设置为“false”,则不适用。 添加使用Babel进行转换的依赖项(来自node_modules,默认情况下不会被转换)。 例: [ /my-dependency/, ...] |
showProgress | Boolean | 编译时显示进度条。 |
transformAssetUrls | Object | 添加对自定义标记属性的引用资源的支持。例如: { 'my-img-comp': 'src', 'my-avatar': [ 'src', 'placeholder-src' ]} |
extendWebpack(cfg) | Function | Quasar CLI生成的扩展Webpack配置。 等同于chainWebpack(),但您可以直接访问Webpack配置对象。 |
chainWebpack(chain) | Function | Quasar CLI生成的扩展Webpack配置。 等同于extendWebpack(),但改为使用webpack-chain。 |
beforeDev({ quasarConf }) | Function | 在运行$ quasar dev 命令之前准备外部服务,比如启动一些后端或应用所依赖的任何其他服务。 可以使用async/await或直接返回Promise。 |
afterDev({ quasarConf }) | Function | quasar开发服务器启动后($ quasar dev )运行钩子。 此时,开发服务器已启动,如果您希望对其执行某些操作则可用这个方法。 可以使用async/await或直接返回Promise。 |
beforeBuild({ quasarConf }) | Function | 在Quasar构建用于生产环境的应用($ quasar build )之前运行钩子。 此时,尚未创建redistributables文件夹。 可以使用async/await或直接返回Promise。 |
afterBuild({ quasarConf }) | Function | 在Quasar构建用于生产环境的应用($ quasar build )之后运行钩子。 此时,distributables文件夹已创建,如果您希望对其执行某些操作,则可用。 可以使用async/await或直接返回Promise。 |
onPublish(opts) | Function | 在Quasar构建用于生产环境的应用并执行afterBuild挂钩(如果指定)之后,如果请求发布($ quasar build -P ),则运行挂钩。 可以使用async/await或直接返回Promise。 opts 是{arg, distDir} 形式的对象,其中“arg”是提供给-P的参数(如果有的话)。 |
publicPath | String | 部署时的公共路径。 |
appBase | String | 使用您的自定义值强制应用基本标签;仅在您确实知道自己在做什么的情况下进行配置,否则您可以轻松破坏应用程序。 强烈建议您保留由@quasar/app-webpack计算的结果。 |
vueRouterBase | String | 用您的自定义值强制应用vue router base;仅在您确实知道自己在做什么的情况下进行配置,否则您可以轻松破坏应用程序。 强烈建议您保留由@quasar/app-webpack计算的结果。 |
vueRouterMode | String | 设置Vue路由器模式:‘hash’或’history’。 请明智选择。 历史记录模式也需要在部署Web服务器上进行配置。 |
htmlFilename | String | 默认是’index.html’. |
ssrPwaHtmlFilename | String | 用于SSR+PWA模式。默认值为’offline.html’。 |
productName | String | 默认值取自package.json> productName字段。 |
distDir | String | Quasar CLI生成可分发包的目录,对应项目根目录的相对路径。 默认是’dist/{ctx.modeName}'。 适用于除Cordova (强制生成到src-cordova/www目录)以外的所有模式。 |
ignorePublicFolder | Boolean | 忽略/public文件夹。如果你依赖于一个statics文件夹,那么你需要自己配置它(在Quasar之外或者通过extendedweback/chainWebpack),所以确保你知道你在做什么。 |
devtool | String | Source map策略使用。 |
env | Object | 将属性添加到process.env ,您可以在您的网站/应用程序JS代码中使用它。 每个属性都需要JSON编码。 例如:{SOMETHING:JSON.stringify(‘someValue’)}。 |
gzip | Boolean | 使用Gzip压缩可分发包。 当您提供内容的网络服务器没有gzip功能时很有用。 |
analyze | Boolean/Object | 使用webpack-bundle-analyzer显示构建包的分析。 如果用作对象,则表示webpack-bundle-analyzer配置对象。 |
vueCompiler | Boolean | 包括vue runtime + compiler版本,而不是默认的Vue运行时版本 |
uglifyOptions | Object | 缩小选项。 完整清单. |
vueLoaderOptions | Object | vue-loader的选项(compilerOptions, compiler, transformAssetUrls, 等等)。 |
scssLoaderOptions | Object | 提供给sass-loader 的.scss 文件的选项。例如:scssLoaderOptions: { additionalData: '@import “src/css/abstracts/_mixins.scss”; ’ } |
sassLoaderOptions | Object | 为.sass 文件提供sass-loader 的选项。 |
stylusLoaderOptions | Object | 提供给’stylus-loader`的选项. |
lessLoaderOptions | Object | 提供给’less-loader`的选项。 |
Quasar CLI根据dev/build命令和Quasar模式自动配置build
的以下属性。 但是如果你想重写一些(确保你知道你在做什么),你可以这样做:
属性 | 类型 | 描述 |
---|---|---|
extractCSS | Boolean | 从Vue文件中提取CSS |
sourceMap | Boolean | 使用 source maps |
minify | Boolean | 压缩代码(html,js,css) |
例如,如果运行“quasar build --debug”,则无论您配置了什么,sourceMap和extractCSS都将设置为“true”。
属性:htmlVariables
您可以在src/index.template.html
中定义然后引用变量,如下所示:
// quasar.config.js
module.exports = function (ctx) {
return {
htmlVariables: {
title: 'test name',
some: {
prop: 'my-prop'
}
}
然后(只是一个示例,向您展示如何引用上面定义的变量,在本例中为title
):
<!-- src/index.template.html -->
<%= title %>
<%= some.prop %>
属性:sourceFiles
如果必须,请使用此属性更改网站/应用程序的某些文件的默认名称。 所有路径必须相对于项目的根文件夹。
// default values:
sourceFiles: {
rootComponent: 'src/App.vue',
router: 'src/router',
store: 'src/store',
indexHtmlTemplate: 'src/index.template.html',
registerServiceWorker: 'src-pwa/register-service-worker.js',
serviceWorker: 'src-pwa/custom-service-worker.js',
electronMain: 'src-electron/electron-main.js',
electronPreload: 'src-electron/electron-preload.js'
}
为dev/build设置env的示例
请参考我们文档中的添加到process.env部分。
处理Webpack配置
深入分析处理Webpack文档页面。