CLI
The command line interface: @vite-pwa/assets-generator.
- 💥 build your PWA assets from a single command, using only 2 options: preset and source
- 🔌 supports custom configurations via
pwa-assets.config.jsorpwa-assets.config.ts
Installation
This package is shipped with the @vite-pwa/assets-generator package:
pnpm add -D @vite-pwa/assets-generatorpnpm add -D @vite-pwa/assets-generatoryarn add -D @vite-pwa/assets-generatoryarn add -D @vite-pwa/assets-generatornpm install -D @vite-pwa/assets-generatornpm install -D @vite-pwa/assets-generatorUsage
$ pwa-asset-generator [options] [sources]$ pwa-asset-generator [options] [sources]INFO
The source files should be relative to root.
Example using command line:
$ pwa-assets-generator --preset minimal public/logo.svg$ pwa-assets-generator --preset minimal public/logo.svgor using package configuration:
{
"scripts": {
"generate-pwa-assets": "pwa-assets-generator --preset minimal public/logo.svg"
}
}{
"scripts": {
"generate-pwa-assets": "pwa-assets-generator --preset minimal public/logo.svg"
}
}INFO
All PWA assets will be generated in the same source folder.
Options
| Options | |
|---|---|
-v, --version | Display version number |
-r, --root <path> | Define the project root, defaults to process.cwd() |
-c, --config <path> | Path to config file |
-p, --preset <preset-name> | Built-in preset name: minimal, android, windows, ios or all |
-o, --override | Override assets? Defaults to true |
-h, --help | Display available CLI options |
Presets
PWA Assets Generator has 5 built-in presets, check out the preset definition and types definition:
- Minimal Preset (
minimal) - iOS Preset (
ios): (WIP) - Windows Preset (
windows): (WIP) - Android Preset (
android): (WIP) - Full Preset (
all:android,windowsandiospresets combined): (WIP)
You can also define your own preset, to use it you will need to add pwa-assets config file to the root of your project.
Built-in features
Configurations
Create a pwa-assets.config.js or pwa-assets.config.ts configuration file in the root-level of your project to customize PWA assets generator CLI:
import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg']
})import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg']
})INFO
CLI options will override the configuration file options.
You can use one of the built-in presets or just define your own, this is the minimal preset definition:
import type { Preset } from '../preset.ts'
export const minimalPreset: Preset = {
transparent: {
sizes: [64, 192, 512],
favicons: [[64, 'favicon.ico']]
},
maskable: {
sizes: [512]
},
apple: {
sizes: [180]
}
}import type { Preset } from '../preset.ts'
export const minimalPreset: Preset = {
transparent: {
sizes: [64, 192, 512],
favicons: [[64, 'favicon.ico']]
},
maskable: {
sizes: [512]
},
apple: {
sizes: [180]
}
}Then run the CLI from the command line:
$ pwa-asset-generator$ pwa-asset-generatoror configure it in your package.json and run it via your package manager from the command line:
{
"scripts": {
"generate-pwa-assets": "pwa-assets-generator"
}
}{
"scripts": {
"generate-pwa-assets": "pwa-assets-generator"
}
}PNG output names
The PNG files names will be generated using the following function (can be found in utils module):
export function defaultAssetName(type: AssetType, size: ResolvedAssetSize) {
switch (type) {
case 'transparent':
return `pwa-${size.width}x${size.height}.png`
case 'maskable':
return `maskable-icon-${size.width}x${size.height}.png`
case 'apple':
return `apple-touch-icon-${size.width}x${size.height}.png`
}
}export function defaultAssetName(type: AssetType, size: ResolvedAssetSize) {
switch (type) {
case 'transparent':
return `pwa-${size.width}x${size.height}.png`
case 'maskable':
return `maskable-icon-${size.width}x${size.height}.png`
case 'apple':
return `apple-touch-icon-${size.width}x${size.height}.png`
}
}You can override the PNG output names providing custom assetName option:
import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg'],
assetName: (type: AssetType, size: ResolvedAssetSize) => {
/* your logic here */
}
})import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg'],
assetName: (type: AssetType, size: ResolvedAssetSize) => {
/* your logic here */
}
})PNG Padding
When generating PNG files, PWA Assets Generator will apply the following padding:
- for
transparentPNG files:0.05 - for
maskableandapplePNG files:0.3
0 is no padding, 0.3 is a typical value for most icons.
PNG optimization/compression
By default, all generated PNG files are optimized using:
{
compressionLevel: 9,
quality: 60
}{
compressionLevel: 9,
quality: 60
}You can provide your optimization options using png option, check the options in sharp png output options:
import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg'],
png: {
compressionLevel: 9,
quality: 85
}
})import {
defineConfig,
minimalPreset as preset
} from '@vite-pwa/assets-generator/config'
export default defineConfig({
preset,
images: ['public/logo.svg'],
png: {
compressionLevel: 9,
quality: 85
}
})