hexojs / hexo

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

Hexo doesn't work properly on windows #4968

Closed fanck0605 closed 2 years ago

fanck0605 commented 2 years ago

Check List

Please check followings before submitting a new issue.

Expected behavior

Hexo can work properly, and the theme display is normal

Actual behavior

On windows11 (node. JS 16), hexo prompts an @import error when parsing the stylus file. It seems that the stylus file cannot be compiled.

image

image

How to reproduce?

  1. Init hexo
hexo init hello-hexo
cd hello-hexo
  1. Serve hexo
hexo s

Is the problem still there under "Safe mode"?

--safe option does not work properly

image

Environment & Settings

All configurations are default values and I haven't made any changes!

Node.js & npm version(node -v && npm -v)

PS C:\Users\Chuck\hello-hexo> node -v; npm -v
v16.14.2
8.10.0

Your site _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
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
highlight:
  enable: true
  line_number: true
  auto_detect: false
  tab_replace: ''
  wrap: true
  hljs: false
prismjs:
  enable: false
  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: ''

Hexo and Plugin version(npm ls --depth 0)

PS C:\Users\Chuck\hello-hexo> npm ls --depth 0
hexo-site@0.0.0 C:\Users\Chuck\hello-hexo
+-- hexo-generator-archive@1.0.0
+-- hexo-generator-category@1.0.0
+-- hexo-generator-index@2.0.0
+-- hexo-generator-tag@1.0.0
+-- hexo-renderer-ejs@2.0.0
+-- hexo-renderer-marked@5.0.0
+-- hexo-renderer-stylus@2.0.1
+-- hexo-server@3.0.0
+-- hexo-theme-landscape@0.0.3
`-- hexo@6.2.0

Your package.json 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": "6.2.0"
  },
  "dependencies": {
    "hexo": "^6.2.0",
    "hexo-generator-archive": "^1.0.0",
    "hexo-generator-category": "^1.0.0",
    "hexo-generator-index": "^2.0.0",
    "hexo-generator-tag": "^1.0.0",
    "hexo-renderer-ejs": "^2.0.0",
    "hexo-renderer-marked": "^5.0.0",
    "hexo-renderer-stylus": "^2.0.0",
    "hexo-server": "^3.0.0",
    "hexo-theme-landscape": "^0.0.3"
  }
}

Others

fanck0605 commented 2 years ago

This seems to be a bug in stylus@0.54.8. When I use pnpm hooks to replace the version of stylus that hexo-renderer-stylus depends on to 0.54.5, the problem is solved. But this is just a workaround.

// file: .pnpmfile.cjs
function readPackage(pkg, context) {
    if (pkg.name === 'hexo-renderer-stylus') {
        pkg.dependencies = {
            ...pkg.dependencies,
            "stylus": "0.54.5"
        }
        context.log('stylus@^0.54.8 => bar@0.54.5 in dependencies of hexo-renderer-stylus')
    }

    return pkg
}

module.exports = {
    hooks: {
        readPackage
    }
}
txf-project commented 2 years ago

me too

wzbhbb commented 2 years ago

me too

MHuiG commented 2 years ago

node16 npm8

git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s

error log:

>git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s
Cloning into 'demo'...
Receiving objects:  10% (6/55)5, done. eceiving objects:   1% (1/55)
remote: Total 55 (delta 0), reused 0 (delta 0), pack-reused 55
Receiving objects: 100% (55/55), 20.12 KiB | 11.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated

added 235 packages in 56s
INFO  Validating config
INFO
============================================================
  Volantis 5.0.0-rc.110
  Docs: https://volantis.js.org/
  Repo: https://github.com/volantis-x/hexo-theme-volantis/
============================================================
INFO  Start processing
INFO  Checking environment configuration...
node:internal/process/promises:279
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: stylus:23:26
   19| @import '_first/*'
   20|
   21| // Custom Files
   22| for $injects_first in hexo-config('injects.first')
   23|   @import $injects_first;
--------------------------------^

failed to locate @import file E:\test\demo\node_modules\stylus\lib\functions\index.styl

    at Evaluator.visitImport (E:\test\demo\node_modules\stylus\lib\visitor\evaluator.js:915:21)
    at Evaluator.Visitor.visit (E:\test\demo\node_modules\stylus\lib\visitor\index.js:28:40)
    at Evaluator.visit (E:\test\demo\node_modules\stylus\lib\visitor\evaluator.js:160:18)
    at Evaluator.visitRoot (E:\test\demo\node_modules\stylus\lib\visitor\evaluator.js:707:27)
    at Evaluator.Visitor.visit (E:\test\demo\node_modules\stylus\lib\visitor\index.js:28:40)
    at Evaluator.visit (E:\test\demo\node_modules\stylus\lib\visitor\evaluator.js:160:18)
    at Evaluator.evaluate (E:\test\demo\node_modules\stylus\lib\visitor\evaluator.js:247:15)
    at Renderer.render (E:\test\demo\node_modules\stylus\lib\renderer.js:86:26)
    at E:\test\demo\node_modules\hexo-theme-volantis\scripts\events\lib\render-stylus.js:38:10
    at Promise._execute (E:\test\demo\node_modules\bluebird\js\release\debuggability.js:384:9)
    at Promise._resolveFromExecutor (E:\test\demo\node_modules\bluebird\js\release\promise.js:518:18)
    at new Promise (E:\test\demo\node_modules\bluebird\js\release\promise.js:103:10)
    at Hexo.hexo.renderStylus (E:\test\demo\node_modules\hexo-theme-volantis\scripts\events\lib\render-stylus.js:34:12)
    at Hexo.generateFirstCSS (E:\test\demo\node_modules\hexo-theme-volantis\scripts\helpers\first-style.js:9:8)
    at Hexo.tryCatcher (E:\test\demo\node_modules\bluebird\js\release\util.js:16:23)
    at Hexo.<anonymous> (E:\test\demo\node_modules\bluebird\js\release\method.js:15:34)
    at E:\test\demo\node_modules\hexo\lib\extend\filter.js:67:52
    at tryCatcher (E:\test\demo\node_modules\bluebird\js\release\util.js:16:23)
    at Object.gotValue (E:\test\demo\node_modules\bluebird\js\release\reduce.js:166:18)
    at Object.gotAccum (E:\test\demo\node_modules\bluebird\js\release\reduce.js:155:25)
    at Object.tryCatcher (E:\test\demo\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (E:\test\demo\node_modules\bluebird\js\release\promise.js:547:31) {
  lineno: 23,
  column: 26,
  filename: 'stylus',
  stylusStack: ''
}
MHuiG commented 2 years ago

node16 npm8

https://github.com/stylus/stylus/issues/2680

https://github.com/isaacs/node-glob/issues/471

package.json

  "overrides": {
    "glob": "7.2.0"
  }

https://github.com/volantis-x/demo/blob/5063cebe42975af229aea88fbcc0e25fa1cc3048/package.json#L14-L19

>npm i

added 1 package, and removed 1 package in 12s
>hexo cl&&hexo s
INFO  Validating config
INFO
============================================================
  Volantis 5.0.0-rc.110
  Docs: https://volantis.js.org/
  Repo: https://github.com/volantis-x/hexo-theme-volantis/
============================================================
INFO  Validating config
INFO
============================================================
  Volantis 5.0.0-rc.110
  Docs: https://volantis.js.org/
  Repo: https://github.com/volantis-x/hexo-theme-volantis/
============================================================
INFO  Start processing
INFO  Checking environment configuration...
INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
INFO  Check environment configuration success!

success!

MHuiG commented 2 years ago

https://github.com/isaacs/node-glob/issues/471#issuecomment-1126739067 Windows Magic : / and \ 🤣

wzbhbb commented 2 years ago

node16 npm8

stylus/stylus#2680

isaacs/node-glob#471

package.json

  "overrides": {
    "glob": "7.2.0"
  }

https://github.com/volantis-x/demo/blob/5063cebe42975af229aea88fbcc0e25fa1cc3048/package.json#L14-L19

>npm i

added 1 package, and removed 1 package in 12s
>hexo cl&&hexo s
INFO  Validating config
INFO
============================================================
  Volantis 5.0.0-rc.110
  Docs: https://volantis.js.org/
  Repo: https://github.com/volantis-x/hexo-theme-volantis/
============================================================
INFO  Validating config
INFO
============================================================
  Volantis 5.0.0-rc.110
  Docs: https://volantis.js.org/
  Repo: https://github.com/volantis-x/hexo-theme-volantis/
============================================================
INFO  Start processing
INFO  Checking environment configuration...
INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
INFO  Check environment configuration success!

success!

Thanks

gonisan commented 2 years ago

@MHuiG 改了package.json还是有问题😭

fanck0605 commented 2 years ago

删了 lock file 再试试?也有可能 npm 太老不支持 overrides。

MHuiG commented 2 years ago

改了package.json还是有问题😭

放弃Windows,使用Linux🤣

gonisan commented 2 years ago

多谢解决了,不知道为什么之前overrides好像没生效,直接npm i@glob7.2.0正常了 @MHuiG @fanck0605

pai233 commented 2 years ago

I'm using stylus@0.54.8 on Windows too. But my hexo still works.

This is my package.json:

{
  "name": "hexo-site",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server",
    "publish": "hexo cl && hexo g && gulp && hexo d"
  },
  "hexo": {
    "version": "5.4.2"
  },
  "dependencies": {
    "@upupming/hexo-renderer-markdown-it-plus": "^2.0.2",
    "bulma-stylus": "^0.8.0",
    "gulp": "^4.0.2",
    "gulp-htmlclean": "^2.7.22",
    "gulp-htmlmin": "^5.0.1",
    "gulp-imagemin": "^7.1.0",
    "gulp-minify-css": "^1.2.4",
    "gulp-uglify": "^3.0.2",
    "hexo": "^5.4.2",
    "hexo-baidu-url-submit": "0.0.6",
    "hexo-butterfly-artitalk": "^1.0.4",
    "hexo-component-inferno": "^0.14.0",
    "hexo-deployer-firebase": "^1.0.5",
    "hexo-deployer-git": "^2.1.0",
    "hexo-deployer-heroku": "^0.1.2",
    "hexo-deployer-hostman": "0.0.5",
    "hexo-generator-archive": "^1.0.0",
    "hexo-generator-baidu-sitemap": "^0.1.9",
    "hexo-generator-category": "^1.0.0",
    "hexo-generator-feed": "^2.2.0",
    "hexo-generator-index": "^1.0.0",
    "hexo-generator-search": "^2.4.3",
    "hexo-generator-searchdb": "^1.4.0",
    "hexo-generator-sitemap": "^2.2.0",
    "hexo-generator-tag": "^1.0.0",
    "hexo-helper-live2d": "^3.1.1",
    "hexo-log": "^2.0.0",
    "hexo-offline": "^2.0.1",
    "hexo-offline-popup": "^1.0.3",
    "hexo-pagination": "^1.0.0",
    "hexo-renderer-ejs": "^1.0.0",
    "hexo-renderer-inferno": "^0.1.3",
    "hexo-renderer-pug": "^2.0.0",
    "hexo-renderer-stylus": "^2.0.1",
    "hexo-server": "^1.0.0",
    "hexo-symbols-count-time": "^0.7.1",
    "hexo-util": "^2.6.1",
    "hexo-wordcount": "^6.0.1",
    "inferno": "^7.4.11",
    "inferno-create-element": "^7.4.11",
    "live2d-widget-model-miku": "^1.0.5",
    "live2d-widget-model-wanko": "^1.0.5"
  }
}

Hope it helps you!

chenxiniubi666 commented 2 years ago

anyone solve it?

isaacs commented 2 years ago

Should be fixed by glob@7.2.3. If it isn't, please post a new issue at https://github.com/isaacs/node-glob/issues, ideally with a reproduction case. Thanks!

fanck0605 commented 2 years ago

已修复