files
inc
templates
y template-parts
fonts
img
js
scss
PWA Generator es un generador de sitios estáticos que crea sitios web estáticos según la configuración del proyecto especificada en projects.json
. Puede generar todo lo necesario para que un sitio web funcione como una aplicación web progresiva, por ejemplo, funciona sin conexión y es instalable. También puede implementarlo en Netlify.
Enumere todos los proyectos configurados para construir en projects.json
./pwagenerator.php projects
Cree, implemente y/o genere íconos para un proyecto usando la configuración del proyecto en projects.json
./pwagenerator.php [project] [option]
options:
-v verbose
-b build
-i generate icons
-d deploy
Por ejemplo:
./pwagenerator exampleproject.com -b
Para crear un nuevo proyecto, agréguelo a projects.json
y luego compílelo.
-v
): proporciona una salida más detallada para la otra opción seleccionada ( -b
, -i
o -d
),-b
): construye el proyecto. Durante este proceso, PWA Generator genera todos los archivos necesarios para que el proyecto funcione. Consulte Proceso de compilación para obtener más información.-i
): Genera iconos para el proyecto. Durante este proceso, PWA Generator configura una matriz de configuración y genera un conjunto de favicons a partir del archivo img/favicon.svg
en el directorio del proyecto usando real-favicon.-d
): Implementa el proyecto. Durante este proceso, PWA Generator incrementa la versión del proyecto e implementa el directorio del proyecto en Netlify usando netlify_id
configurado en projects.json
y netlify-cli. files
El directorio files
contiene archivos que se copian en el proyecto cuando se crea.
Las fuentes en el directorio fonts
solo se copiarán si están enumeradas en el objeto fonts
en projects.json
, por ejemplo:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
Los archivos en el directorio opt
solo se copiarán si figuran en el objeto opt_files
en projects.json
, por ejemplo:
"opt_files": [
"opt/google_auth.js"
]
inc
El directorio inc
contiene archivos que se utilizan para ejecutar tareas del proyecto.
class-build.php
contiene funcionalidad para crear, implementar y generar favicons.class-cli.php
contiene funcionalidad para operaciones de línea de comando.class-projects.php
contiene funcionalidad para obtener proyectos de projects.json
.class-text.php
contiene funcionalidad para formatear texto.templates
y template-parts
Los directorios templates
y template-parts
contienen archivos que se utilizan para crear páginas.
Cuando se crea un proyecto por primera vez, se crean varios archivos y directorios en el directorio del proyecto.
index.php
: no se sobrescribirá en futuras compilaciones y debe contener cualquier marcado y funcionalidad que sean específicos del proyecto.js/main.ts
: no se sobrescribirá en futuras compilaciones y debe contener cualquier funcionalidad específica del proyecto.scss/style.scss
: no se sobrescribirá en futuras compilaciones y debe contener estilos específicos del proyecto._redirects
: archivo de redirecciones de Netlify. Puede contener reglas de redireccionamiento y reescritura..gitignore
: Git ignora el archivo. Contiene una lista de archivos y carpetas que Git no debe rastrear.manifest.json
: archivo de manifiesto de la aplicación web. Contiene datos que informan al navegador sobre la aplicación web progresiva y cómo debe comportarse cuando se instala.package.json
: archivo de datos del proyecto npm
. Contiene datos del proyecto para el administrador de paquetes npm
.package-lock.json
: archivo de versión de dependencia npm
. Contiene versiones de dependencia para paquetes instalados por el administrador de paquetes npm
. npm
lo genera automáticamente cuando se instala un paquete.robots.txt
: archivo de robots. Contiene una lista de reglas para ayudar a los motores de búsqueda a determinar qué páginas deben y no deben rastrear.sitemap.xml
: archivo de mapa del sitio. Contiene una lista de páginas para ayudar a los motores de búsqueda a descubrir contenido y, por lo tanto, mejora la optimización de los motores de búsqueda (SEO).sw.js
: archivo de trabajador de servicio. Contiene una funcionalidad que almacena en caché los activos y permite la navegación sin conexión y una experiencia descargable "similar a una aplicación".tsconfig.json
: archivo de configuración de compilación de Webpack TypeScript.webpack.config.js
: archivo de configuración del paquete web para generar el bundle.[hash].js
a partir de los archivos js/*.ts
y scss/*.scss
.fonts
El directorio fonts
contiene archivos de fuentes que se copian desde files/fonts
durante el proceso de compilación. Cualquier cambio realizado en este directorio se sobrescribirá en futuras compilaciones.
img
El directorio img
contiene imágenes y archivos que se generan mediante el comando -i
. Se debe colocar un favicon.svg
en este directorio antes de ejecutar ese comando.
Este directorio también debe contener:
cache_files
en projects.json
. Si se incluye en cache_files
y en el objeto nav.image
en projects.json
, la imagen se usará en la barra de navegación del encabezado superior. Si se incluye en cache_files
y en el objeto header.image
en projects.json
, la imagen se usará en el encabezado principal.share.jpg
utilizada para compartir en redes sociales.posts.json
, que debe denominarse URL de la publicación con una extensión de archivo .jpg
.screenshots
en projects.json
.js
El directorio js
contiene archivos .ts
que se copian desde files/js
durante el proceso de compilación, y un archivo bundle.[hash].js
que se genera a partir de estos archivos .ts
y archivos en el directorio scss
.
Este directorio también contiene un archivo main.ts
, que se generará como un archivo en blanco en la compilación inicial. No se sobrescribirá con futuras compilaciones y debe contener cualquier funcionalidad específica del proyecto.
Este directorio también puede contener opcionalmente main.js
, si se necesita un archivo sin compilar. Si es necesario, este archivo también debe incluirse en el objeto cache_files
en projects.json
.
scss
El directorio scss
contiene archivos .scss
que se copian desde files/scss
durante el proceso de compilación.
Este directorio también contiene un archivo style.scss
, que se generará en la compilación inicial como un archivo que contiene solo una declaración :root {}
que contiene las fuentes y colores de los objetos fonts
y colors
en projects.json
. No se sobrescribirá con compilaciones futuras y debe contener estilos específicos del proyecto.
projects.json
dependiendo del project
pasado a través de la línea de comando.$this->project_data['files']['compile']
se utiliza para compilar archivos en el directorio del proyecto.$this->project_data['files']['compile']
$this->project_data['files']['copy']
se utiliza para copiar archivos en el directorio del proyecto.files/scss
y files/js
se agregan a $this->project_data['files']['copy']
.files/opt
solo se agregan a $this->project_data['files']['copy']
si también figuran en el objeto opt_files
en projects.json
, por ejemplo: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['copy']
.$this->project_data['files']['cache']
se utiliza para agregar archivos al archivo sw.js
para que el trabajador del servicio los almacene en caché.data.json
(usado para generar páginas adicionales para crear una experiencia de búsqueda similar a una aplicación) y posts.json
(usado para generar publicaciones de blog), se agregan a $this->project_data['files']['cache']
.cache_files
en projects.json
se agregan a $this->project_data['files']['cache']
, por ejemplo: "cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/shortcut.png"
]
files/opt
solo se agregan a $this->project_data['files']['cache']
si también figuran en el objeto opt_files
en projects.json
, por ejemplo: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['cache']
post
(por ejemplo, extraída de posts.json
), también se agrega una imagen a $this->project_data['files']['cache']
, usando la URL de la página y la extensión de archivo .jpg
.$this->project_data['files']['cache']
$this->project_data['sitemap']['urls']
para generar el archivo sitemap.xml
más adelante.package.json
index.php
scss
y scss/style.scss
con una declaración :root {}
que contiene las fuentes y colores de los objetos fonts
y colors
en projects.json
, por ejemplo "fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"colors": {
"main": {
"normal": "92D7DA",
"dark": "489094"
},
"accent": {
"normal": "FA96C0",
"dark": "B34F78"
}
}
js
y js/main.ts
opt
.gitignore
con node_modules
sw.js
$this->project_data['files']['copy']
en el directorio del proyecto.bundle.[hash].js
a partir de los archivos js/*.ts
y scss/*.scss
proporcionados mediante Webpack a través de webpack-cli, luego usa el comando php
con project
, page
y project_data
pasados como argumentos para compila cada archivo en $this->project_data['files']['compile']
en un archivo .html
minificado.manifest.json
. El archivo manifest.json
se copia en el directorio del proyecto y luego se modifica según los valores en projects.json
( categories
, screenshots
, shortcuts
, android_app_id
y apple_app_id
).$this->project_data['files']['compile']
y $this->project_data['files']['copy']
:***FILES***
: Archivos de $this->project_data['files']['cache']
***URLS***
: URL de $this->project_data['redirects']
y $this->project_data['sitemap']['urls']
***REDIRECT_URLS***
: URL de $this->project_data['files']['compile']
y $this->project_data['redirects']
***URL***
: La URL del proyecto de $this->project_data['url']
***TITLE***
: El título del proyecto de $this->project_data['title']
***DESCRIPTION***
: La descripción del proyecto de $this->project_data['description']
***VERSION***
: La versión del proyecto de $this->project_data['version']
(extraída de sw.js
)***DATE***
: fecha('Am-d') Estas son las fuentes disponibles para usar en el objeto fonts
en projects.json
, por ejemplo:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
Los siguientes proyectos de código abierto se han creado utilizando PWA Generator. Consulte el sitio web, el repositorio de GitHub y la configuración del proyecto para projects.json
a continuación.
{
"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": []
}
¡Las contribuciones son bienvenidas! Si descubre un problema o tiene una idea para mejorarlo, no dude en crear un problema.