hexo が v6.3.0 にアップグレードされました
2022-12-16 10:29 2022-12-29 21:16 ≈ 1.1k字 ≈ 5分

**2022.12.29更新、上下ページに同じカテゴリーしか表示されない問題を解決するため、元々分けていた章をここに統合しました 非常に短いので別記事に分ける必要はありません。 **

ここ数日、記事の更新に集中していたのですが、いつも git に記事を送信して記事を自動生成していたので、 hexo g が強調表示エラーを表示することに気づきました。

主な理由は、生成時に警告を報告するだけで、使用には影響しないためです。今回、テーマのスタイルを調整したいときに発見したため、プラグインをアップグレードする必要があります(1 年近くアップグレードしていませんでした)。私のhexoバージョンはまだ5.4ですが、現在は6.3です)

hexo とプラグインをアップグレードする

ノードと npm をアップグレードする方法はインターネット上にたくさんあります。検索すると見つかります。

  1. hexo バージョンを確認します: hexo version
  2. グローバル アップグレード: npm i hexo-cli -g
  3. hexo ディレクトリに移動します。
  4. プラグインを確認します: npm-check
  5. プロンプトに従って手動でアップグレードすることも、npm-upgrade + npm update --save で直接アップグレードすることもできます。
  6. バージョン番号をもう一度チェックして確認します: hexo version

変更した箇所が上書きされていないか確認してください

アップグレード自体には何も問題はありません。ただ、私はコメントを書くのが好きではないので、いくつかのプラグインを手動で変更し、その後アップグレードによってそれらが上書きされた可能性があります。

私が変更した主なシステム プラグインは 2 つあります。

hexo-generator-index 記事で述べたように、ホームページからいくつかのカテゴリを削除しました。変更しないと、ページ分割されたページにはまだこのカテゴリの記事が含まれており、ページ上の記事の数が正しくなくなります。

hexo-generator-category も変更しましたが、完全に忘れていたため、小説のカテゴリの並べ替えに問題が発生しました。原因を見つけるために git を直接使用して変更し、比較しました。 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
'use strict';

const pagination = require('hexo-pagination');

module.exports = function(locals) {
const config = this.config;
const perPage = config.category_generator.per_page;
const paginationDir = config.pagination_dir || 'page';
var orderBy = config.category_generator.order_by || '-order'; //要用变量var 不要用常量

return locals.categories.reduce((result, category) => {
if (!category.length) return result;

//当分类为小说novel时,采用手动排序,其他的为默认日期排序,这个order是写在小说md文件的Front-matter里的
//用于同一个分类的小说集中展示
//然后在小说页面里面再进行日期排序
if(category.name == 'novel'){
orderBy = config.category_generator.order_by || '-order';
}else{
orderBy = config.category_generator.order_by || '-date';
}

const posts = category.posts.sort(orderBy);
const data = pagination(category.path, posts, {
perPage,
layout: ['category', 'archive', 'index'],
format: paginationDir + '/%d/',
data: {
category: category.name
}
});

return result.concat(data);
}, []);
};

急いでアップグレード プロセスを手動で記録すると、後で忘れてアップグレードする必要がなくなります。最終的な表示効果は非常に優れています。

1671162733620

前ページと次ページのリンクには、同じカテゴリの記事のみが表示されます

私の hexo には、記事のコンテキスト アドレスという問題があります。このアドレスは、システム ページング中またはそれ以前に作成されました。元のロジックには問題ありませんが、エッセイ、経験、小説に基づいたものにしたいと考えています。分類により、3 つの異なるコンテキストに対応するアドレスが生成されます。

つまり、私のWebサイトには3つのcategoriesに属する3つのナビゲーションがあり、記事に入るとフッターにある前後のページのタイトルとリンクが、実はすべての記事でdate順になっているのです。これらは全体的に配置されているため、たとえば、エッセイの次のページをクリックすると、体験共有の記事をクリックすることができますが、ここではこの問題を解決します。

人それぞれテーマが違うので、記事ページに対応する ejs の書き方も違うかもしれません。 説明のための元のコードを載せておきます(見苦しいし、決してベストプラクティスではありませんが、使えます。誰かが見てくれれば。)それを彼は私が最適化したいので、メッセージを残してください(笑))。

jsコードを見やすくするために、ejs構文とhtml構文をコメントアウトしました。

これはpost.ejsファイルに書かれています

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var tmpNext = page.next; //現在のページの次のページオブジェクトを変数に代入します。
while(true){ //暴力的なループ
if(tmpNext){ //次のページは空ではありません
if(page.categories.data[0].name == tmpNext.categories.data[0].name){ //現在のページの最初のカテゴリは次のページのカテゴリと同じです
if(page.categories.data[0].name == 'novel'){ //現在のページは小説カテゴリです
if(page.categories.data[1].name == tmpNext.categories.data[1].name){ //第二段階分類判定を追加
// <a href="<%- url_for(tmpNext.path) %>" target="_self">
// <span><%= tmpNext.title %></span>
// <i class="iconfont icon-chevronright"></i>
// </a>
壊す;
}それ以外{
tmpNext = tmpNext.next; //次の大きな不満を見つける
}
}それ以外{
// <a href="<%- url_for(tmpNext.path) %>" target="_self">
// <span><%= tmpNext.title %></span>
// <i class="iconfont icon-chevronright"></i>
// </a>
壊す;
}
}それ以外{
tmpNext = tmpNext.next; //次の大きな不満を見つける
}
}else{ //次のページは空なのでループを終了します
壊す;
}
}

私の書き方が乱暴すぎたためか、ソース コードを使用して説明するのが明確ではありませんでした。簡単に説明します。

  1. まず次のページがあるかどうかを判断します
  2. 次に、現在のページと次のページのカテゴリが一致しているかどうかを判断し、一致していない場合は、次の大きな苦情を見つけます。
  3. 現在のページと次のページが一致する場合、それが小説カテゴリであるかどうかを判断します。一致しない場合は、そのまま小説カテゴリに分類されます。
  4. 現在のページが小説に分類されている場合、二次分類を決定します (私の小説は二次分類に従ってコレクションに保存されます)。そうでない場合は、次の大きな苦情を見つけます。
  5. 現在のページは小説カテゴリであり、コレクションに属しているので、これで終わりです

これは私のニーズを完全に満たしています:

  1. エッセイや体験談ごとに分類された記事はすべて前後のページにリンクされています。
  2. 小説をコレクションごとに分類し、前後のページをリンクします。

もっと良い書き方があると思いますし、他のトピックにも私と同じニーズがあるはずですが、このトピックが好きなので、他のトピックを勉強するのが面倒です。結局のところ、個人のウェブサイトで最も重要なのはそのコンテンツであり、その機能を満たすことができる場合は、まずそれを使用してください。