Egg: npm run doc-server 报错

Created on 12 Dec 2017  ·  24Comments  ·  Source: eggjs/egg

npm run doc-server 报错,Console server has not been registered yet!

  • Node Version:8.7.0
  • Egg Version:2.0.0
tools bug

Most helpful comment

错误原因:

@popomore 这个错误,原因在于 npmcnpm 安装依赖包方式有差异。
使 hexo 在初始化时,加载 hexo-server 依赖包失败。进而导致你出现的错误。

具体分析:

步骤一: hexo 在初始化的时候(new Hexo()),会尝试更新并加载这5个依赖包:

{
  "hexo": {
    "version": "3.4.3"
  },
  "dependencies": {
    "hexo-generator-index": "^0.2.1",
    "hexo-generator-tag": "^0.2.0",
    "hexo-renderer-less": "^0.2.0",
    "hexo-renderer-nunjucks": "^1.0.5",
    "hexo-server": "^0.2.0"
  }
}

步骤二:

cnpm下,这5个依赖包存放路径是这样的:

node_modules\[email protected]@egg-doctools\node_modules\hexo-generator-index
node_modules\[email protected]@egg-doctools\node_modules\hexo-generator-tag
node_modules\[email protected]@egg-doctools\node_modules\hexo-renderer-less
node_modules\[email protected]@egg-doctools\node_modules\hexo-renderer-nunjucks
node_modules\[email protected]@egg-doctools\node_modules\hexo-server

npm 下,这5个依赖包存放路径是这样的:
s

node_modules\hexo-generator-index
node_modules\hexo-generator-tag
node_modules\hexo-renderer-less
node_modules\hexo-renderer-nunjucks
node_modules\hexo-server

步骤三: hexo 是会到当前根目录下,找这5个依赖包,
(eg:当前代码根目录在 egg-doctools, 即会在 egg-doctools/node_modules 下找这个依赖包)

image

具体代码逻辑可跟踪
hexo/lib/hexo/index.js
hexo/lib/hexo/load_plugins.js,
hexo/lib/hexo/update_package.js
这几个文件。

步骤四, 错误还原。

  • 由于没有成功加载 hexo-server
  • 所以没有成功调用 `hexo.extend.console.register('server');
  • 而调用 yield this.hexo.call('server', {}); 时会调用到 self.extend.console.get('server');
  • 由于找不到 self.extend.console.get('server'),所以抛出上面错误。

抛错位置代码片段:
image

解法:

  1. 先使用 cnpm 应对
  2. 需要 cnpm 同学协助,了解 npmcnpm 之间的区别,和各自安装原理。
  3. 上面步骤确认问题后,可能需要提 issuehexo 解决。

All 24 comments

需要提供可复现方式。

这个命令是用于本地预览 egg 文档的,试下重新安装依赖(干掉 lock 文件先)

@atian25 clone 下来之后,npm install就是这样,
npm version:5.3.0
hexo-cli version: 1.0.4

image

无法复现,自己跟下源码分析下?

很奇怪啊,我到 build Document 那里,报的是 hexo 的错
image

可能要分析源码看看了。

cc @popomore 知道啥问题不?

我也碰到了同样的问题,报错信息都一样
node 9.3.0

你们为啥需要本地构建文档?

@atian25 构建着玩啊,觉得 egg 的文档很赞,学习一下怎么做的

可以看下我们写的 https://github.com/eggjs/doctools 研究下源码和测试用例,看看是哪里的问题

之前我遇到是 readme 中,有非法语法,这块确实比较难找问题。

@ngot 嗯,你那个问题之前 @popomore 遇到过。

但现在的问题是,他们取的是最新的文档,我本地,还有 ci 构建都没问题。

@atian25
我构建是因为看到官网没有英文版的入口
强行打开https://eggjs.org/en/intro/
发现顶栏链接不对
侧栏有些翻译是泰语的
想帮忙改一下

@cuyl 赞,非常需要~~~ 还有多语言切换的那个也可以开启了。

@cuyl 你试下换为 8 LTS 版本看看,重新清空安装下依赖。如果还有问题,试着删掉一些文档,排除下是不是非法语法的问题。

@atian25
LTS 我也切换过了,一样的问题,况且 @shengxinjing 他就是用的8

语法问题的话我没改代码也运行不了呢

可以复现了,用 npm 安装时可以复现,我们几个都是用 cnpm 的,估计是依赖引入问题。

cc @popomore

@cuyl @shengxinjing 你们可以先用 cnpm 或 https://github.com/cnpm/npminstall 安装下依赖。

这个问题我们再看看,是这里挂了 https://github.com/eggjs/doctools/blob/master/lib/base.js#L64

@atian25 竟然这么诡异 我马上切到 cnpm 试试

@atian25果然切到 cnpm 就好了

@shengxinjing @cuyl 你们先在 cnpm 下用着先吧,对 hexo 不熟,还不知道原因在哪。

@popomore doctools 的用例在 npm 下也跑不了。

就用 cnpm 跑吧

错误原因:

@popomore 这个错误,原因在于 npmcnpm 安装依赖包方式有差异。
使 hexo 在初始化时,加载 hexo-server 依赖包失败。进而导致你出现的错误。

具体分析:

步骤一: hexo 在初始化的时候(new Hexo()),会尝试更新并加载这5个依赖包:

{
  "hexo": {
    "version": "3.4.3"
  },
  "dependencies": {
    "hexo-generator-index": "^0.2.1",
    "hexo-generator-tag": "^0.2.0",
    "hexo-renderer-less": "^0.2.0",
    "hexo-renderer-nunjucks": "^1.0.5",
    "hexo-server": "^0.2.0"
  }
}

步骤二:

cnpm下,这5个依赖包存放路径是这样的:

node_modules\[email protected]@egg-doctools\node_modules\hexo-generator-index
node_modules\[email protected]@egg-doctools\node_modules\hexo-generator-tag
node_modules\[email protected]@egg-doctools\node_modules\hexo-renderer-less
node_modules\[email protected]@egg-doctools\node_modules\hexo-renderer-nunjucks
node_modules\[email protected]@egg-doctools\node_modules\hexo-server

npm 下,这5个依赖包存放路径是这样的:
s

node_modules\hexo-generator-index
node_modules\hexo-generator-tag
node_modules\hexo-renderer-less
node_modules\hexo-renderer-nunjucks
node_modules\hexo-server

步骤三: hexo 是会到当前根目录下,找这5个依赖包,
(eg:当前代码根目录在 egg-doctools, 即会在 egg-doctools/node_modules 下找这个依赖包)

image

具体代码逻辑可跟踪
hexo/lib/hexo/index.js
hexo/lib/hexo/load_plugins.js,
hexo/lib/hexo/update_package.js
这几个文件。

步骤四, 错误还原。

  • 由于没有成功加载 hexo-server
  • 所以没有成功调用 `hexo.extend.console.register('server');
  • 而调用 yield this.hexo.call('server', {}); 时会调用到 self.extend.console.get('server');
  • 由于找不到 self.extend.console.get('server'),所以抛出上面错误。

抛错位置代码片段:
image

解法:

  1. 先使用 cnpm 应对
  2. 需要 cnpm 同学协助,了解 npmcnpm 之间的区别,和各自安装原理。
  3. 上面步骤确认问题后,可能需要提 issuehexo 解决。

[email protected] 已经修复该问题,重新安装下依赖即可。

Was this page helpful?
0 / 5 - 0 ratings