hexojs / hexo

A fast, simple & powerful blog framework, powered by Node.js.
https://hexo.io
MIT License
38.83k stars 4.75k forks source link

[hexo generate] files are failing to generate and link together correctly. #5376

Closed AdnanTech closed 6 months ago

AdnanTech commented 6 months ago

Check List

Expected behavior

hexo generate should produce static files correctly linked with URLs pointing to the correct posts and index page. CSS and JS files generated by hexo should be found by pages correctly. This happens when the root path is set /, when the root path is set to ./, the css files are correctly linked but the post URLs do not work correctly.

This error has occured with both a new project using hexo as well as a project configured with hexo icarus theme. Tested on both Windows 11 and Ubuntu.

Similar posts:

Actual behavior

hexo server shows the website correctly, with all links working. when I use hexo generate, the post webpages are incorrectly generated.

When I use root: ./ instead of root: / in the _configure.yml file, the index.html content correctly displays, however the posts content does not display correctly, and the console logs Loading failed for the <script> with source “file:///c:/Users/adnan/Desktop/test/public/2023/12/05/hello-world/js/script.js”., along with the other js files. This suggests a major error with how my project is routing files when hexo generate is executed.

How to reproduce?

  1. hexo init
  2. hexo generate

To test with changed root

  1. underneath url in _configure.yml, add line root: ./
  2. hexo clean
  3. hexo generate

Is the problem still there under Safe mode?

yes

Your Node.js & npm version

node: v18.18.2, npm: 10.2.4

Your Hexo and Plugin version

hexo-site@0.0.0 C:\Users\adnan\Desktop\test
├── hexo-generator-archive@2.0.0
├── hexo-generator-category@2.0.0
├── hexo-generator-index@3.0.0
├── hexo-generator-tag@2.0.0
├── hexo-renderer-ejs@2.0.0
├── hexo-renderer-marked@6.2.0
├── hexo-renderer-stylus@3.0.0
├── hexo-server@3.0.0
├── hexo-theme-landscape@1.0.0
└── hexo@7.0.0

Your package.json

{
  "name": "hexo-site",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },
  "hexo": {
    "version": "7.0.0"
  },
  "dependencies": {
    "hexo": "^7.0.0",
    "hexo-generator-archive": "^2.0.0",
    "hexo-generator-category": "^2.0.0",
    "hexo-generator-index": "^3.0.0",
    "hexo-generator-tag": "^2.0.0",
    "hexo-renderer-ejs": "^2.0.0",
    "hexo-renderer-marked": "^6.0.0",
    "hexo-renderer-stylus": "^3.0.0",
    "hexo-server": "^3.0.0",
    "hexo-theme-landscape": "^1.0.0"
  }
}

Your site's _config.yml (Optional)

# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/

# Site
title: Hexo
subtitle: ''
description: ''
keywords:
author: John Doe
language: en
timezone: ''

# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: http://example.com
root: ./
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
  trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
  trailing_html: true # Set to false to remove trailing '.html' from permalinks

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:

# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link:
  enable: true # Open external links in new tab
  field: site # Apply to the whole site
  exclude: ''
filename_case: 0
render_drafts: false
post_asset_folder: false
relative_link: false
future: true
syntax_highlighter: highlight.js
highlight:
  line_number: true
  auto_detect: false
  tab_replace: ''
  wrap: true
  hljs: false
prismjs:
  preprocess: true
  line_number: true
  tab_replace: ''

# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
  path: ''
  per_page: 10
  order_by: -date

# Category & Tag
default_category: uncategorized
category_map:
tag_map:

# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: true

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## updated_option supports 'mtime', 'date', 'empty'
updated_option: 'mtime'

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page

# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
include:
exclude:
ignore:

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
  type: ''

Others

No response

uiolee commented 6 months ago

There is no need to set root: ./

https://github.com/hexojs/hexo/issues/2163#issuecomment-252039651, https://github.com/hexojs/hexo/issues/4244#issuecomment-614447281 had told you answer.

you shou use use http:// instead of file:// to preview your website.

use http-server, serve or other tools to preview public/