config.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict';
  2. function isObject(item) {
  3. return item && typeof item === 'object' && !Array.isArray(item);
  4. }
  5. function merge(target, source) {
  6. for (const key in source) {
  7. if (isObject(target[key]) && isObject(source[key])) {
  8. merge(target[key], source[key]);
  9. } else {
  10. target[key] = source[key];
  11. }
  12. }
  13. return target;
  14. }
  15. module.exports = hexo => {
  16. let data = hexo.locals.get('data');
  17. /**
  18. * Merge configs from _data/next.yml into hexo.theme.config.
  19. * If `override`, configs in next.yml will rewrite configs in hexo.theme.config.
  20. * If next.yml not exists, merge all `theme_config.*` into hexo.theme.config.
  21. */
  22. if (data.next) {
  23. if (data.next.override) {
  24. hexo.theme.config = data.next;
  25. } else {
  26. merge(hexo.config, data.next);
  27. merge(hexo.theme.config, data.next);
  28. }
  29. } else {
  30. merge(hexo.theme.config, hexo.config.theme_config);
  31. }
  32. if (hexo.theme.config.cache && hexo.theme.config.cache.enable && hexo.config.relative_link) {
  33. hexo.log.warn('Since caching is turned on, the `relative_link` option in Hexo `_config.yml` is set to `false` to avoid potential hazards.');
  34. hexo.config.relative_link = false;
  35. }
  36. hexo.config.meta_generator = false;
  37. // Custom languages support. Introduced in NexT v6.3.0.
  38. if (data.languages) {
  39. let { language } = hexo.config;
  40. let { i18n } = hexo.theme;
  41. const mergeLang = lang => {
  42. i18n.set(lang, merge(i18n.get([lang]), data.languages[lang]));
  43. };
  44. if (Array.isArray(language)) {
  45. for (let lang of language) {
  46. mergeLang(lang);
  47. }
  48. } else {
  49. mergeLang(language);
  50. }
  51. }
  52. };