files
inc
Annuairetemplates
et template-parts
fonts
img
Répertoirejs
Répertoirescss
PWA Generator est un générateur de sites statiques qui crée des sites Web statiques basés sur la configuration du projet spécifiée dans projects.json
. Il peut générer tout ce dont un site Web a besoin pour fonctionner comme une application Web progressive, par exemple, il fonctionne hors ligne et il est installable. Il peut également le déployer sur Netlify.
Répertorier tous les projets configurés pour la construction projects.json
./pwagenerator.php projects
Créez, déployez et/ou générez des icônes pour un projet à l'aide de la configuration du projet projects.json
./pwagenerator.php [project] [option]
options:
-v verbose
-b build
-i generate icons
-d deploy
Par exemple:
./pwagenerator exampleproject.com -b
Pour créer un nouveau projet, ajoutez-le à projects.json
, puis créez-le.
-v
) : fournit une sortie plus détaillée pour l'autre option sélectionnée ( -b
, -i
ou -d
),-b
) : construit le projet. Au cours de ce processus, PWA Generator génère tous les fichiers nécessaires au fonctionnement du projet. Voir Processus de génération pour plus d'informations.-i
) : génère des icônes pour le projet. Au cours de ce processus, PWA Generator configure un tableau de configuration et génère un ensemble de favicons à partir du fichier img/favicon.svg
dans le répertoire du projet à l'aide de real-favicon.-d
) : Déploie le projet. Au cours de ce processus, PWA Generator incrémente la version du projet et déploie le répertoire du projet sur Netlify à l'aide du netlify_id
défini projects.json
et netlify-cli. files
Le répertoire files
contient les fichiers qui sont copiés dans le projet lors de sa construction.
Les polices du répertoire fonts
ne seront copiées que si elles sont répertoriées dans l'objet fonts
dans projects.json
, par exemple :
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
Les fichiers du répertoire opt
ne seront copiés que s'ils sont répertoriés dans l'objet opt_files
dans projects.json
, par exemple :
"opt_files": [
"opt/google_auth.js"
]
inc
Annuaire Le répertoire inc
contient des fichiers utilisés pour exécuter les tâches du projet.
class-build.php
contient des fonctionnalités pour créer, déployer et générer des favicons.class-cli.php
contient des fonctionnalités pour les opérations en ligne de commande.class-projects.php
contient des fonctionnalités permettant d'obtenir des projets à partir projects.json
.class-text.php
contient des fonctionnalités de formatage du texte.templates
et template-parts
Les répertoires templates
et template-parts
contiennent des fichiers utilisés pour créer des pages.
Lorsqu'un projet est construit pour la première fois, plusieurs fichiers et répertoires sont créés dans le répertoire du projet.
index.php
: ne sera pas écrasé par les versions futures et doit contenir des balises et des fonctionnalités spécifiques au projet.js/main.ts
: ne sera pas écrasé par les versions futures et doit contenir toute fonctionnalité spécifique au projet.scss/style.scss
: ne sera pas écrasé par les versions futures et doit contenir tous les styles spécifiques au projet._redirects
: fichier de redirection Netlify. Peut contenir des règles de redirection et de réécriture..gitignore
: Git ignore le fichier. Contient une liste de fichiers et de dossiers que Git ne doit pas suivre.manifest.json
: fichier manifeste de l’application Web. Contient des données qui indiquent au navigateur l'application Web progressive et comment elle doit se comporter une fois installée.package.json
: fichier de données du projet npm
. Contient les données de projet pour le gestionnaire de packages npm
.package-lock.json
: fichier de version de dépendance npm
. Contient les versions de dépendances pour les packages installés par le gestionnaire de packages npm
. Il est automatiquement généré par npm
lorsqu'un package est installé.robots.txt
: fichier robots. Contient une liste de règles pour aider les moteurs de recherche à déterminer les pages qu'ils doivent et ne doivent pas explorer.sitemap.xml
: Fichier de plan du site. Contient une liste de pages pour aider les moteurs de recherche à découvrir du contenu et améliore ainsi l'optimisation des moteurs de recherche (SEO).sw.js
: fichier du travailleur de service. Contient des fonctionnalités qui mettent en cache les actifs et permettent une navigation hors ligne et une expérience « semblable à une application » téléchargeable.tsconfig.json
: fichier de configuration de compilation Webpack TypeScript.webpack.config.js
: Fichier de configuration Webpack pour générer le bundle.[hash].js
à partir des fichiers js/*.ts
et scss/*.scss
.fonts
Le répertoire fonts
contient des fichiers de polices copiés à partir de files/fonts
pendant le processus de construction. Toutes les modifications apportées à ce répertoire seront écrasées par les futures versions.
img
Répertoire Le répertoire img
contient des images et des fichiers générés via la commande -i
. Un favicon.svg
doit être placé dans ce répertoire avant d'exécuter cette commande.
Ce répertoire doit également contenir :
cache_files
dans projects.json
. Si elle est incluse dans cache_files
et dans l'objet nav.image
projects.json
, l'image sera utilisée dans la barre de navigation de l'en-tête supérieure. Si elle est incluse dans cache_files
et dans l'objet header.image
projects.json
, l'image sera utilisée dans l'en-tête principal.share.jpg
utilisée pour le partage sur les réseaux sociaux.posts.json
, qui doit être nommée l'URL de la publication avec une extension de fichier .jpg
.screenshots
dans projects.json
.js
Répertoire Le répertoire js
contient des fichiers .ts
qui sont copiés à partir de files/js
pendant le processus de construction, ainsi qu'un fichier bundle.[hash].js
généré à partir de ces fichiers .ts
et des fichiers dans le répertoire scss
.
Ce répertoire contient également un fichier main.ts
, qui sera généré en tant que fichier vierge lors de la construction initiale. Il ne sera pas écrasé par les versions futures et doit contenir des fonctionnalités spécifiques au projet.
Ce répertoire peut également éventuellement contenir un main.js
, si un fichier non compilé est nécessaire. Si cela est nécessaire, ce fichier doit également être inclus dans l'objet cache_files
dans projects.json
.
scss
Le répertoire scss
contient les fichiers .scss
qui sont copiés à partir de files/scss
pendant le processus de construction.
Ce répertoire contient également un fichier style.scss
, qui sera généré lors de la construction initiale en tant que fichier contenant uniquement une déclaration :root {}
contenant les polices et les couleurs des objets fonts
et colors
dans projects.json
. Il ne sera pas écrasé par les versions futures et doit contenir des styles spécifiques au projet.
projects.json
en fonction du project
transmis via la ligne de commande.$this->project_data['files']['compile']
est utilisé pour compiler les fichiers dans le répertoire du projet.$this->project_data['files']['compile']
$this->project_data['files']['copy']
est utilisé pour copier des fichiers dans le répertoire du projet.files/scss
et files/js
sont ajoutés à $this->project_data['files']['copy']
.files/opt
ne sont ajoutés à $this->project_data['files']['copy']
que s'ils sont également répertoriés dans l'objet opt_files
projects.json
, par exemple : "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['copy']
.$this->project_data['files']['cache']
est utilisé pour ajouter des fichiers au fichier sw.js
pour la mise en cache par le service worker.data.json
(utilisés pour générer des pages supplémentaires pour créer une expérience de recherche semblable à celle d'une application) et posts.json
(utilisés pour générer des articles de blog), sont ajoutés à $this->project_data['files']['cache']
.cache_files
dans projects.json
sont ajoutés à $this->project_data['files']['cache']
, par exemple : "cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/shortcut.png"
]
files/opt
ne sont ajoutés à $this->project_data['files']['cache']
que s'ils sont également répertoriés dans l'objet opt_files
projects.json
, par exemple : "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['cache']
post
(par exemple extraite de posts.json
), une image est également ajoutée à $this->project_data['files']['cache']
, en utilisant l'URL de la page et l'extension de fichier .jpg
.$this->project_data['files']['cache']
$this->project_data['sitemap']['urls']
pour générer le fichier sitemap.xml
ultérieurement.package.json
index.php
scss
et scss/style.scss
avec une déclaration :root {}
contenant les polices et les couleurs des objets fonts
et colors
dans projects.json
, par exemple "fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"colors": {
"main": {
"normal": "92D7DA",
"dark": "489094"
},
"accent": {
"normal": "FA96C0",
"dark": "B34F78"
}
}
js
et js/main.ts
opt
.gitignore
avec node_modules
sw.js
$this->project_data['files']['copy']
dans le répertoire du projet.bundle.[hash].js
à partir des fichiers js/*.ts
et scss/*.scss
fournis à l'aide de Webpack via webpack-cli, puis utilise la commande php
avec le project
, page
et project_data
transmis comme arguments à compilez chaque fichier dans $this->project_data['files']['compile']
dans un fichier .html
minifié.manifest.json
. Le fichier manifest.json
est copié dans le répertoire du projet, puis modifié en fonction des valeurs de projects.json
( categories
, screenshots
, shortcuts
, android_app_id
et apple_app_id
).$this->project_data['files']['compile']
et $this->project_data['files']['copy']
:***FILES***
: Fichiers de $this->project_data['files']['cache']
***URLS***
: URL de $this->project_data['redirects']
et $this->project_data['sitemap']['urls']
***REDIRECT_URLS***
: URL de $this->project_data['files']['compile']
et $this->project_data['redirects']
***URL***
: L'URL du projet depuis $this->project_data['url']
***TITLE***
: Le titre du projet depuis $this->project_data['title']
***DESCRIPTION***
: La description du projet de $this->project_data['description']
***VERSION***
: La version du projet depuis $this->project_data['version']
(extraite de sw.js
)***DATE***
: date('Am-d') Voici les polices disponibles pour une utilisation dans l'objet fonts
dans projects.json
, par exemple :
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
Les projets open source suivants ont été construits à l'aide de PWA Generator. Consultez le site Web, le dépôt GitHub et la configuration du projet pour projects.json
ci-dessous.
{
"url": "nicolefurlan.com",
"title": "Nicole Furlan",
"description": "Software engineer on a pursuit of equality, compassion, and justice for all.",
"keywords": "nicole furlan, nicole pitts",
"categories": [],
"netlify_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"gtm_id": "G-XXXXXXXXXX",
"fbpixel_id": null,
"repixel_id": null,
"google_ads": false,
"amazon_ads": false,
"other_ads": false,
"google_api": {
"google_api_client_id": null,
"google_api_client_key": null,
"google_api_key": null,
"google_api_scope": null,
"google_api_url": null,
"google_api_callback": null
},
"fonts": {
"heading": "Playfair Display",
"body": "Raleway"
},
"fontawesome": true,
"android_app_id": {
"free": null,
"paid": null
},
"apple_app_id": {
"free": null,
"paid": null
},
"screenshots": [
"img/screenshot.png"
],
"shortcuts": null,
"links": [],
"nav": {
"image": "img/logo_nav.svg"
},
"header": {
"title": "Hi! I'm Nicole",
"description": "I'm a Software Engineer working on building a better world for us all",
"image": "img/background.webp",
"image_credit": "Photo by <a href="https://pbase.com/tclout/root" alt="Thomas Cloutier Photography">Thomas Cloutier Photography</a>"
},
"social": {
"mailto": "[email protected]",
"facebook": null,
"twitter": null,
"github": "nikkifurls",
"patreon": null,
"paypal": "donate?hosted_button_id=M7MMF3EWQTLKG",
"portfolio": null,
"yelp": null,
"tripadvisor": null,
"custom": [
{
"url": null,
"label": null,
"text": null,
"link": null
}
]
},
"author": {
"name": "Nicole Furlan",
"twitter": "nicolemfurlan"
},
"redirects": [
{
"from": "/donate",
"to": "https://www.paypal.com/donate?hosted_button_id=M7MMF3EWQTLKG"
}
],
"pages": [],
"cache_files": [
"img/background.webp",
"img/logo_nav.svg"
],
"opt_files": []
}
{
"url": "dogsafefoods.com",
"title": "Dog Safe Foods",
"description": "Sharing food with your dog? Make sure it's safe first",
"keywords": "dog safe foods, dog safe human food, dog safe human foods, safe for dogs to eat, can dogs eat, can my dog eat, can dogs have, can my dog have, good human food for dogs, food dog can eat",
"categories": [
"pets",
"food"
],
"netlify_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"gtm_id": "G-XXXXXXXXXX",
"fbpixel_id": "xxxxxxxxxxxxxxx",
"repixel_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
"google_ads": true,
"amazon_ads": false,
"other_ads": false,
"google_api": {
"google_api_client_id": null,
"google_api_client_key": null,
"google_api_key": null,
"google_api_scope": null,
"google_api_url": null,
"google_api_callback": null
},
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"fontawesome": true,
"android_app_id": {
"free": "com.dog_safe_foods.twa",
"paid": "com.dogsafefoods.twa"
},
"apple_app_id": {
"free": null,
"paid": null
},
"screenshots": [
"img/screenshot1.png",
"img/screenshot2.png",
"img/screenshot3.png"
],
"shortcuts": [
{
"name": "View Safe Foods",
"description": "View all foods that are safe for dogs to eat",
"url": "./safe",
"icons": [
{
"src": "img/icon-thumbs-up.png",
"sizes": "512x512"
}
]
},
{
"name": "View Unsafe Foods",
"description": "View all foods that are not safe for dogs to eat",
"url": "./unsafe",
"icons": [
{
"src": "img/icon-thumbs-down.png",
"sizes": "512x512"
}
]
}
],
"links": [],
"nav": {
"image": "img/logo_nav.svg"
},
"header": {
"title": null,
"description": null,
"image": "img/logo_header.svg",
"image_credit": null
},
"social": {
"mailto": "[email protected]",
"facebook": null,
"twitter": "dogsafefoods",
"github": "nikkifurls/dogsafefoods",
"patreon": null,
"paypal": "donate?hosted_button_id=M7MMF3EWQTLKG",
"portfolio": "nicolefurlan.com",
"yelp": null,
"tripadvisor": null,
"custom": [
{
"url": "https://catsafefoods.com",
"label": "Cat Safe Foods",
"text": null,
"link": "<i class='fas fa-cat'></i>"
}
]
},
"author": {
"name": "Nicole Furlan",
"twitter": "nicolemfurlan"
},
"redirects": [
{
"from": "/healthy",
"to": "/safe 301!"
},
{
"from": "/unhealthy",
"to": "/unsafe 301!"
},
{
"from": "/healthy.html",
"to": "/safe 301!"
},
{
"from": "/unhealthy.html",
"to": "/unsafe 301!"
},
{
"from": "/* food=:food",
"to": "/:food 301!"
}
],
"pages": {
"*": {
"url": "",
"title": "",
"description": "Sharing ***TITLE*** with your dog? Make sure it's safe first",
"keywords": "can dogs eat ***TITLE***, can dogs have ***TITLE***, dogs ***TITLE***, dogs and ***TITLE***, ***TITLE*** safe for dogs, ***TITLE*** bad for dogs, ***TITLE*** ok for dogs, is it safe for dogs to eat ***TITLE***, is it safe for dogs to have ***TITLE***"
},
"safe": {
"url": "safe",
"title": "Safe Foods for Dogs",
"description": "Sharing food with your dog? Make sure it's on this list of safe foods for dogs first",
"keywords": "healthy human food for dogs, safe human food for dogs, human food that dogs can eat, good human food for dogs"
},
"unsafe": {
"url": "unsafe",
"title": "Unsafe Foods for Dogs",
"description": "Sharing food with your dog? Make sure it's not on this list of unsafe foods for dogs first",
"keywords": "unhealthy human food for dogs, food not to feed dogs, bad food for dogs, bad human food for dogs"
}
},
"cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/icon-thumbs-up.png",
"img/icon-thumbs-down.png",
"ads.txt",
"sellers.json"
],
"opt_files": []
}
Les contributions sont les bienvenues ! Si vous découvrez un problème ou avez une idée d'amélioration, n'hésitez pas à créer un problème.