Configuración del entorno de Jekyll para las páginas de GitHub

Estoy construyendo un sitio con Jekyll que estoy alojando en GitHub Pages. Me gustaría poder establecer JEKYLL_ENV en 'producción' ( JEKYLL_ENV=production ) cuando deployment en GitHub Pages para que pueda hacer algo como esto:

 {% if jekyll.environment == "production" %} {% include googleAnalytics.html %} {% endif %} 

y

 {% if jekyll.environment == "production" %} <link rel="stylesheet" href="/assets/css/main.min.css"> {% else %} <link rel="stylesheet" href="/assets/css/main.css"> {% endif %} 

Ahora, he leído que GitHub Pages debería establecer JEKYLL_ENV automáticamente en production , pero cuando lanzo {{ jekyll.enviornment }} en mi página, obtengo development tanto localmente como en mi sitio alojado. Esto puede tener que ver conmigo construyendo el sitio antes de implementar usando esto y esto .

Mi gulpfile.js

 var gulp = require('gulp'); var ghPages = require('gulp-gh-pages'); var browserSync = require('browser-sync'); var sass = require('gulp-sass'); var prefix = require('gulp-autoprefixer'); var minifyCss = require('gulp-minify-css'); var rename = require('gulp-rename'); var cp = require('child_process'); ... /** * Build the Jekyll Site */ gulp.task('jekyll-build', function (done) { browserSync.notify(messages.jekyllBuild); return cp.spawn('jekyll', ['build'], {stdio: 'inherit'}) .on('close', done); }); ... /** * Deploy to gh-pages */ gulp.task('deploy', ['jekyll-build'], function() { return gulp.src('./_site/**/*') .pipe(ghPages()); }); 

Básicamente, cuando ejecuto gulp deploy , tomo el directory _site y lo _site a la twig gh-pages .

No sé si esto está causando que el entorno se configure para el development o qué, pero lo que estoy pensando hacer es, en lugar de ejecutar la tarea jekyll-build en la tarea de deploy , crear y ejecutar un nuevo jekyll-build-prod tarea que establece el JEKYLL_ENV en production .

Este es el problema con el que me estoy metiendo. No estoy seguro de cómo configurar el entorno utilizando child_process spawns (ya estaba escrito en esta repetición). He visto este command recomendado: $ JEKYLL_ENV=production jekyll build . Parece que necesito modificar mi tarea jekyll-build para incorporar eso.

Si hay una manera más simple de hacer esto, me encantaría escucharlo.

Cualquier ayuda es apreciada.

EDITAR:

He intentado include tanto un _config.yml donde establezco el environment: prod y un _config_dev.yml donde establezco el environment: dev y la actualización de mis tareas gulp a:

 /** * Build the Jekyll Site */ gulp.task('jekyll-build', function (done) { browserSync.notify(messages.jekyllBuild); return cp.spawn('jekyll', ['build', '--config', '_config.yml,_config_dev.yml'], {stdio: 'inherit'}) .on('close', done); }); /** * Build the Jekyll Site for production */ gulp.task('jekyll-build-prod', function (done) { browserSync.notify(messages.jekyllBuild); return cp.spawn('jekyll', ['build', '--config', '_config.yml'], {stdio: 'inherit'}) .on('close', done); }); 

Sin embargo, cuando ejecuto la tarea de implementación y verifico el sitio alojado, todavía dice que el environment es development .

Incluso si _config.yml environment: prod en ambos _config.yml y _config_dev.yml , todavía dice development .

Yo no uso las páginas de GitHub personalmente … pero, según tengo entendido, GitHub Pages establece JEKYLL_ENV en production cuando JEKYLL_ENV tu código fuente en GitHub y dejas que GitHub Pages construya el sitio .

Está haciendo algo diferente: está construyendo su sitio localmente y simplemente _site los files HTML terminados (la carpeta _site ), por lo que las páginas de GitHub nunca buildán su sitio.

Esto significa que debe tener cuidado de cambiar entre el development y la production usted mismo cuando construya su sitio localmente.
La forma más fácil de hacerlo es usar dos files de configuration separados, como expliqué en esta respuesta .

Si desea alojar un sitio en las páginas de GitHub usando Jekyll, el mejor método es usar un repository, y tener bifurcaciones gh-pages en él.

La twig gh-pages se sirve como producción y puede usar su master o cualquier otra twig para uso local.

Como las twigs serán diferentes, puede realizar cambios en los files, agregar más files o cualquier otro cambio que desee y la producción funcionará en consecuencia.

Referencia de muestra: https://github.com/VikramTiwari/blog

Después de muchas testings y errores, finalmente descubrí cómo solucionar este problema. Por alguna razón, la respuesta proporcionada por @Christian Specht (el uso de dos files de configuration diferentes no funcionaba). En cambio, tuve que cambiar manualmente los entornos utilizando el child process spawns en mis tareas de gulp. Mi gulpfile.js actualizado:

 /** * Build the Jekyll Site */ gulp.task('jekyll-build', function (done) { browserSync.notify(messages.jekyllBuild); return cp.spawn('jekyll', ['build'], { stdio: 'inherit' }) .on('close', done); }); /** * Build the Jekyll Site for production */ gulp.task('jekyll-build-prod', function (done) { browserSync.notify(messages.jekyllBuild); var productionEnv = process.env; productionEnv.JEKYLL_ENV = 'production'; return cp.spawn('jekyll', ['build'], { stdio: 'inherit' , env:productionEnv }) .on('close', done); }); /** * Deploy to gh-pages */ gulp.task('deploy', ['jekyll-build-prod'], function() { return gulp.src('./_site/**/*') .pipe(ghPages()); }); 
    Intereting Posts