2016-01-05 3 views
3

Я создаю сайт с Jekyll, который я размещаю на страницах GitHub. Я хотел бы быть в состоянии установить JEKYLL_ENV к 'производству' (JEKYLL_ENV=production) при развертывании на GitHub Pages, так что я могу сделать что-то вроде этого:Настройка среды Jekyll для GitHub Страницы

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

и

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

Теперь, I» что GitHub Pages автоматически устанавливает JEKYLL_ENV в production, но когда я бросаю {{ jekyll.enviornment }} на свою страницу, я получаю development как локально, так и на моем размещенном сайте. Возможно, это связано с тем, что я строил сайт до развертывания с использованием this и this.

Мои 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()); 
}); 

По сути, когда я бегу gulp deploy, я беру каталог _site и подтолкнуть ее к gh-pages отрасли.

Я не знаю, если это является причиной окружающей среды должен быть установлен в development или что, но то, что я имею в виду делать это вместо запуска jekyll-build задачи в deploy задачи создания и запуска новой jekyll-build-prod задачу, устанавливает JEKYLL_ENV на production.

В этой проблеме я столкнулся. Я не уверен, как настроить среду, используя child_processspawns (она уже была написана в this шаблоном). Я видел эту команду, рекомендованную: $ JEKYLL_ENV=production jekyll build. Мне просто нужно изменить мою задачу jekyll-build, чтобы включить ее.

Если есть более простой способ сделать это, я бы хотел его услышать.

Любая помощь приветствуется.

EDIT:

Я попытался в то числе как в _config.yml, где я поставил environment: prod и _config_dev.yml где я поставил environment: dev и обновление моего глотка задачи:

/** 
* 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); 
}); 

Однако, когда я запускаю задачу развернуть и проверьте размещенный сайт, он по-прежнему говорит, что environment - development.

Даже если я включаю environment: prod как в _config.yml, так и в _config_dev.yml, он все еще говорит development.

ответ

0

После долгих проб и ошибок я наконец выяснил, как исправить эту проблему. По какой-то причине ответ, предоставленный @Christian Specht (с использованием двух разных файлов конфигурации, не работал). Вместо этого мне пришлось вручную изменять среды, используя child process spawns в моих задачах с глотком. Обновлено gulpfile.js:

/** 
* 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()); 
}); 
0

Если вы хотите разместить сайт на страницах GitHub с помощью Jekyll, лучшим методом является использование одного репо, и в нем есть ветка gh-pages.

Филиал gh-pages является производством, и вы можете использовать своего хозяина или любую другую ветку для местного использования.

Поскольку ветки будут разными, вы можете вносить изменения в файлы, добавлять файлы или любые другие изменения, которые вы хотите, и производство будет работать соответствующим образом.

ссылка

Пример: https://github.com/VikramTiwari/blog

+0

Вы правы, это действительно работает. Однако мне нравилось, как «gulp-gh-pages» только толкали содержимое папки '_site' в ветку' gh-pages'. Это сделало его намного чище. Если я не смогу понять, как это сделать по-другому, мне придется это сделать. – user2909019

5

Я не использую GitHub Pagès себя ... но, как я понимаю, GitHub Pages устанавливает JEKYLL_ENV в productionкогда вы нажимаете ваш исходный код GitHub и пусть GitHub Страницы сборки сайт.

Вы делаете что-то другое: вы создаете свой сайт локально и просто нажимаете готовые HTML-файлы (папка _site), поэтому страницы GitHub никогда не будут создавать ваш сайт.

Это означает, что вам необходимо позаботиться о переходе между development и production самостоятельно, когда вы создаете свой сайт локально.
Самый простой способ сделать это - использовать два отдельных файла конфигурации, как я объяснил в this answer.

+0

Правильно, страницы GiHub на самом деле не создают сайт. Я попытался создать '_config.yml' и' _config_dev.yml' и обновить мои задачи gulp (см. Мой EDIT), но похоже, что '_config.yml' не читается. – user2909019

+0

Я не знаю, что такое Gulp, поэтому я не могу сказать, правильны ли ваши задачи Gulp. Вы пытались напрямую выполнить команды Jekyll через командную строку без Gulp? Получает ли это желаемые результаты? –

+0

Да, это странно. В моем 'index.html' я помещаю' {{jekyll.environment}} 'и я пробовал' jekyll build', 'jekyll build --config _config.yml' и' jekyll serve', и все они приводят к ' даже если я устанавливаю '_config.yml' и' _config_dev.yml' '' production'. – user2909019

Смежные вопросы