Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为GitHub页面设置Jekyll环境_Github_Gulp_Jekyll_Github Pages_Child Process - Fatal编程技术网

为GitHub页面设置Jekyll环境

为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建立一个网站,我正在GitHub页面上托管该网站。当我部署到GitHub页面时,我希望能够将JEKYLL_ENV设置为“生产”(
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());
});