Yeoman 生成器启动速度极慢

Yeoman generator startup extremely slow

我创建了一个 Yeoman 生成器,它过去对我来说工作起来相当快捷。最近,性能直线下降到惊人的低点,每次我可以做一个简单的 yo generator-name 时都需要等待多达五分钟。这让我的工作变得极其困难,Yeoman 问题板上似乎没有任何帮助。

我试过打开详细的 Yeoman 调试,等了五分钟后,第一个 yeoman:generator 语句出现了。这是我得到的:

> yo @my/generator:subgen tryNumberOne
  yeoman:generator Queueing initializing in initializing +0ms
  yeoman:generator Queueing prompting in prompting +4ms
  yeoman:generator Queueing writing in writing +0ms
  yeoman:generator Queueing end in end +0ms
  yeoman:generator Running initializing +4ms
Creating pure component file

- Initializing
  yeoman:generator Running prompting +4ms

最糟糕的是,我已经验证这在另一个团队成员的 PC 上可以正常工作。它非常活泼,没有性能问题,所以问题不在代码上。

我唯一能想到的是 Yeoman 在我的机器上寻找依赖项的方式有些不对劲,或者它试图通过网络查找某些东西并超时,然后 运行ning 正常。不幸的是,我没有办法检验我能看到的理论。

尝试使用节点检查器时出现异常:

node --inspect-brk C:\Progra~1\nodejs\yo -i @my/generator:subgen tryTwo

Debugger listening on ws://127.0.0.1:9229/b56a9400-57c0-407d-9fb8-a114b6c6df47
For help see https://nodejs.org/en/docs/inspector
Debugger attached.
C:\Users\myuser\AppData\Roaming\nvm\v8.11.3\yo:2
basedir=$(dirname "$(echo "[=11=]" | sed -e 's,\,/,g')")
          ^^^^^^^

SyntaxError: missing ) after argument list
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
Waiting for the debugger to disconnect...
^C

当然,使用上面的 ws:// 协议 url 在浏览器中是行不通的。您必须将其更改为 http://,然后添加 /json/list,并从那里拉出真正的 url 以在 Chrome 中打开调试器。即便如此,输出仍然是 SyntaxError: missing ) after argument list

我什至可以 运行 只需一个简单的 yo 命令,并且仍然需要等待,所以即使是生成器本身也不是问题。

有人知道这里发生了什么吗?

问题:https://github.com/yeoman/yo/issues/176

目前的解决方法,降级到 "yo": "1.8.5",如 comment 中所述。

其他需要考虑的事情

  • 在本地安装yo

  • 使用 npm 脚本直接将 yo 指向您的生成器路径

在你的 package.json

"scripts": {
    "yo": "yo ./dist/yo-generator -- --no-insight"
},
"devDependencies": {
    "yo": "1.8.5"
}

然后你可以做 npm run yo,对我来说这也比使用全局 yo 命令更快。

我一直在关注这个问题,从2.0.5版本开始这个问题已经解决了。在此之前的任何版本中遇到此问题的任何人都应尽快升级。

如果您由于某种原因无法升级,请坚持使用 1.8.5,正如我在 Yeoman 问题板上的评论中提到的那样。