为GitHub页面设置Jekyll环境
我正在与Jekyll建立一个网站,我正在GitHub页面上托管该网站。当我部署到GitHub页面时,我希望能够将JEKYLL_ENV设置为“生产”(为GitHub页面设置Jekyll环境,github,gulp,jekyll,github-pages,child-process,Github,Gulp,Jekyll,Github Pages,Child Process,我正在与Jekyll建立一个网站,我正在GitHub页面上托管该网站。当我部署到GitHub页面时,我希望能够将JEKYLL_ENV设置为“生产”(JEKYLL_ENV=production),这样我就可以执行以下操作: {% if jekyll.environment == "production" %} {% include googleAnalytics.html %} {% endif %} 及 基本上,当我运行gulpdeploy时,我会将\u站点目录推送到gh页面分支 我不知道这是
JEKYLL_ENV=production
),这样我就可以执行以下操作:
{% if jekyll.environment == "production" %}
{% include googleAnalytics.html %}
{% endif %}
及
基本上,当我运行gulpdeploy
时,我会将\u站点
目录推送到gh页面
分支
我不知道这是否导致环境设置为开发
或什么,但是我想做的不是在deploy
任务中运行jekyll build
任务,而是创建并运行一个新的jekyll build prod
任务,该任务将jekyll_ENV
设置为production
这就是我遇到的问题。我不知道如何使用child\u进程spawns
(它已经在样板文件中编写)来设置环境。我已经看到了推荐的命令:$JEKYLL\u ENV=production-JEKYLL-build
。我似乎只需要修改我的jekyllbuild
任务来合并它
如果有更简单的方法,我很想听听
感谢您的帮助
编辑:
我已尝试在设置环境:prod
的位置包含\u config.yml
和设置环境:dev
的位置包含\u config\u dev.yml
,并将我的gulp任务更新为:
/**
* 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);
});
但是,当我运行deploy任务并检查托管站点时,它仍然说环境
是开发
即使我在\u config.yml
和\u config\u dev.yml
中都包含environment:prod
,它仍然说development
如果你想在GitHub页面上使用Jekyll托管一个站点,最好的方法是使用一个repo,并在其中包含gh pages
分支
gh页面
分支用作生产,您可以使用母版或任何其他分支进行本地使用
由于分支将是不同的,您可以对文件进行更改,添加更多文件或任何其他您想要的更改,生产将相应地工作
示例参考:我自己不使用GitHub页面……但据我所知,当您将源代码推送到GitHub并让GitHub页面构建站点时,GitHub页面将JEKYLL_ENV
设置为生产
您正在做一些不同的事情:您在本地构建站点,只需推送完成的HTML文件(站点
\u
文件夹),这样GitHub页面就永远不会真正构建站点
这意味着,当您在本地构建站点时,您需要自行在开发
和生产
之间切换。
最简单的方法是使用两个单独的配置文件,如我在中所述。经过多次尝试和错误,我终于找到了解决此问题的方法。不管出于什么原因,@Christian Specht(使用两个不同的配置文件)提供的答案不起作用。相反,我不得不在我的gulp任务中使用子进程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());
});
你说得对,这确实管用。然而,我确实喜欢吞下gh页面
只是将\u站点
文件夹内容推到gh页面
分支。它使它更干净了。如果我不知道如何用另一种方式来做,我将不得不这样做。没错,GiHub页面实际上并不是在构建网站。我试图创建一个\u config.yml
和\u config\u dev.yml
并更新我的gulp任务(请参见我的编辑),但似乎没有读取\u config.yml
。我不知道gulp,所以我无法判断您的gulp任务是否正确。您是否尝试过通过命令行直接执行Jekyll命令而不使用Gulp?这会产生预期的结果吗?是的,很奇怪。在我的index.html
中,我把{{{jekyll.environment}}
放进去,我尝试了jekyll build
,jekyll build--config\u config.yml
,和jekyll-service
,它们都会导致development
,即使我将\u-config.yml
和\u-config\u-dev.yml
都设置为production
。我只是尝试了jekyll\u-ENV=production-jekyll-build
,但效果不错。我不知道为什么配置文件不起作用。要使用两个配置文件,您需要运行jekyllserve
,如下所示。注意逗号:bundle-exec-jekyll-serve-config\u-config.yml,\u-config\u-dev.yml
/**
* 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);
});
/**
* 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());
});