【问题标题】:Relative links in Jekyll on Github Pages and localhost are not working correctlyGithub Pages 和 localhost 上 Jekyll 中的相对链接无法正常工作
【发布时间】:2018-05-17 15:13:58
【问题描述】:

我使用 Gulp 来运行 Jekyll。我的设置在 localhost 上运行良好,但是当我引入 Github Pages 时,相关链接停止工作。我使用gulp-gh-pages npm 包将_site 内容推送到gh-pages 分支。

gulpfile.js 与 Jekyll 和 Github 页面相关的内容:

var browserSync  = require('browser-sync').create();
var gulp         = require('gulp');
var runSequence  = require('run-sequence');
var ghPages      = require('gulp-gh-pages');
var gutil        = require('gulp-util');
var run          = require('gulp-run');
var del          = require('del');

gulp.task('build:jekyll', function(callback) {
    var shellCommand = 'jekyll build --incremental';

    return gulp.src('')
        .pipe(run(shellCommand))
        .on('error', gutil.log);

    callback();
});

gulp.task('clean', function() {
    return del(['_site', 'assets']);
});

// [`build:scripts`, `build:styles`, `build:images`] is removed from the runSequence example for MVP
gulp.task('build:prod', function(callback) {
    return runSequence('clean', 'build:jekyll', callback)
    browserSync.reload();
});

gulp.task('deploy',['build:prod'], function(){
    return gulp.src('./_site/**/*')
        .pipe(ghPages());
});

config.yml的内容:

baseurl: /

collections:
  pages:
    output: true
    permalink: /:title/

exclude: ["_assets", "gulpfile.js", "node_modules", "package.json", "package-lock.json", ".jekyll-metadata"]

对资产的引用:

<link rel="stylesheet" href="{{ site.baseurl }}assets/styles/main.min.css">

_pages目录内每一页的头条:

---
layout: page
title: Title
description: Awesome description
image: https://source.unsplash.com/random/?water
---

这里是我的 Github 存储库的链接以及完整的源代码:https://github.com/alljamin/portfolio

如何配置 Gulp 和 Jekyll,以便所有相关链接在本地和 Github 页面上都可以使用?

【问题讨论】:

    标签: javascript gulp jekyll github-pages


    【解决方案1】:

    详细阐述@david-jacquel 的答案,我找到了一种通过单独的 Gulp 任务成功运行 localhost 和 Github Pages 环境的方法。

    gulpfile.js的内容:

    gulp.task('build:jekyll:dev', function(callback) {
        var shellCommand = 'jekyll build --incremental --baseurl "" ';
    
        return gulp.src('')
            .pipe(run(shellCommand))
            .on('error', gutil.log);
    
        callback();
    });
    
    gulp.task('build:jekyll:prod', function(callback) {
        var shellCommand = 'jekyll build --incremental';
    
        return gulp.src('')
            .pipe(run(shellCommand))
            .on('error', gutil.log);
    
        callback();
    });
    

    build:jekyll:dev 任务会将_config.yml baseurl 覆盖为""。所以我可以这样做:

    gulp.task('build:dev', function(callback) {
        return runSequence('clean', ['build:scripts', 'build:styles', 'build:images'], 'build:jekyll:dev', callback)
        browserSync.reload();
    });
    
    gulp.task('build:prod', function(callback) {
        return runSequence('clean', ['build:scripts', 'build:styles', 'build:images'], 'build:jekyll:prod', callback)
        browserSync.reload();
    });
    
    gulp.task('serve', ['build:dev'], function() {
        browserSync.init({
            server: {
                baseDir: "_site"
            },
            ghostMode: false, 
            logFileChanges: true,
            logLevel: 'debug',
            open: true        
        });
        gulp.watch(...);
    });
    
    gulp.task('deploy',['build:prod'], function(){
        return gulp.src('./_site/**/*')
            .pipe(ghPages());
    });
    

    【讨论】:

      【解决方案2】:

      试试:“baseurl: /portfolio

      使用{{site.baseurl}}/path/to/res{{ "/path/to/res" | prepend: site.baseurl }} 生成网址。

      【讨论】:

      • Github 页面现在可以工作,但在本地无法加载某些资产。有没有机会在本地和 Github 页面上进行设置?或者,我是否需要两个单独的 _config.yml 文件,一个用于开发,一个用于生产?
      • @JoostS 你的意思是你在本地开发和生产(Github Pages)之间没有任何分离?那么你如何处理相对网址(baseurl 会有所不同)?
      • 本地我在 localhost:4000 上运行,在 Github Pages 上我在自定义域名上运行该站点。因此,该站点始终位于根目录中。这就像一个魅力。
      • 将浏览器指向 localhost:4000/portfolio 应该可以。如果不是,请查看生成的 url,可能是斜杠问题或类似问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2021-05-08
      • 1970-01-01
      • 2017-08-16
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多