如何从生成器存储库 运行 全局生成生成器?

How to run a global generate generator from a generator repository?

说我们在存储库中 generate-mygenerator。 因此我们在根目录中有一个 generator.js 文件。

如果我想 运行 gen gh-repo 怎么办?

我收到以下错误:

Error: Cannot find module 'lazy-cache'
at Function.Module._resolveFilename (module.js:538:15)
at Function.Module._load (module.js:468:25)
at Module.require (module.js:587:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/home/remi/d/dev/generate-package/utils.js:3:13)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
/home/remi/d/dev/generate/bin/generate.js:78
if (err) return app.emit('error', err);
                  ^

TypeError: Cannot read property 'emit' of undefined
at /home/remi/d/dev/generate/bin/generate.js:78:23
at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/base-runner/index.js:122:7)
at Liftoff.execute (/home/remi/d/dev/generate/node_modules/liftoff/index.js:203:12)
at module.exports (/home/remi/d/dev/generate/node_modules/flagged-respawn/index.js:51:3)
at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:195:5)
at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:170:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:686:11)
at startup (bootstrap_node.js:187:16)

我是否必须将 generator.js 重命名为 generator.js.wait,然后在生成器完成后将其重命名?

重现错误的步骤:

generate-package 存储库中的示例:

remi@poremil:~
$ cd d/dev/generate-package/
remi@poremil:~/d/dev/generate-package:master
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
remi@poremil:~/d/dev/generate-package:master
$ node -v
v8.9.4
remi@poremil:~/d/dev/generate-package:master
$ npm -v
5.6.0
remi@poremil:~/d/dev/generate-package:master
$ ls
docs  generator.js  index.js  LICENSE  package.json  README.md  templates  test  utils.js

运行 generate-gh-repo:

remi@poremil:~/d/dev/generate-package:master
$ gen gh-repo
[23:33:06] starting generate
[23:33:06] using generator ~/d/dev/generate-package/generator.js
Error: Cannot find module 'lazy-cache'
    at Function.Module._resolveFilename (module.js:538:15)
    at Function.Module._load (module.js:468:25)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/remi/d/dev/generate-package/utils.js:3:13)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
/home/remi/d/dev/generate/bin/generate.js:78
  if (err) return app.emit('error', err);
                      ^

TypeError: Cannot read property 'emit' of undefined
    at /home/remi/d/dev/generate/bin/generate.js:78:23
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/base-runner/index.js:122:7)
    at Liftoff.execute (/home/remi/d/dev/generate/node_modules/liftoff/index.js:203:12)
    at module.exports (/home/remi/d/dev/generate/node_modules/flagged-respawn/index.js:51:3)
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:195:5)
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:170:7)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:686:11)
    at startup (bootstrap_node.js:187:16)

还是一样运行宁generate-git:

remi@poremil:~/d/dev/generate-package:master
$ gen git
[23:33:16] starting generate
[23:33:16] using generator ~/d/dev/generate-package/generator.js
Error: Cannot find module 'lazy-cache'
    at Function.Module._resolveFilename (module.js:538:15)
    at Function.Module._load (module.js:468:25)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/remi/d/dev/generate-package/utils.js:3:13)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
/home/remi/d/dev/generate/bin/generate.js:78
  if (err) return app.emit('error', err);
                      ^

TypeError: Cannot read property 'emit' of undefined
    at /home/remi/d/dev/generate/bin/generate.js:78:23
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/base-runner/index.js:122:7)
    at Liftoff.execute (/home/remi/d/dev/generate/node_modules/liftoff/index.js:203:12)
    at module.exports (/home/remi/d/dev/generate/node_modules/flagged-respawn/index.js:51:3)
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:195:5)
    at Liftoff.<anonymous> (/home/remi/d/dev/generate/node_modules/liftoff/index.js:170:7)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:686:11)
    at startup (bootstrap_node.js:187:16)

原则

只要 generate-gh-repo 已全局安装并且您的 generator.js 文件中没有名为 gh-repo 的任务,全局生成器应该 运行。

如果您的 generator.js 文件中有一个任务与您尝试 运行 的全局安装的生成器同名,那么该任务将 运行 代替。这是因为生成器将以比全局生成器更高的优先级解决任务。

您可以通过 运行ning gen gh-repo:default 将全局生成器 运行 (将 gh-repo 替换为您尝试 运行).这告诉生成器在 gh-repo 生成器上寻找默认任务。如果您没有像这样在 generator.js 文件中注册 gh-repo 生成器:

app.register('gh-repo', require('generate-gh-repo'));

然后生成应该找到全局安装的生成器。

它应该有效

当你 运行 gen gh-repo.

它应该可以正常工作

为避免此错误,只需安装本地 npm 依赖项

我只是重现了错误的行为,只是试图 运行 另一个尚未安装本地节点模块的生成器的根文件夹中的全局生成器!

generate-package 存储库中的示例:

正在安装 npm 依赖项:

remi@poremil:~/d/dev/generate-package:master
$ npm install
npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning EINTEGRITY: sha1-x6vpzIuHwLqodrGf3oP9RkeX44w= integrity checksum failed when using sha1: wanted sha1-x6vpzIuHwLqodrGf3oP9RkeX44w= but got sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==. (4087 bytes)
npm WARN registry Using stale package data from https://registry.npmjs.org/ due to a request error during revalidation.
npm notice created a lockfile as package-lock.json. You should commit this file.
added 982 packages in 38.844s

又是运行generate-gh-repo:

remi@poremil:~/d/dev/generate-package:master
$ gen gh-repo
[02:31:11] starting generate
[02:31:11] using generator ~/d/dev/generate-package/generator.js
[02:31:11] ✔ running tasks: [ 'gh-repo' ]
[02:31:11] starting gh-repo
[02:31:11] starting gh-repo:default task
[02:31:11] starting gh-repo:gh-repo task

? Found saved GitHub authentication. Would you like to use it? (Y/n)

generate-git:

remi@poremil:~/d/dev/generate-package:master
$ gen git
[02:31:00] starting generate
[02:31:01] using generator ~/d/dev/generate-package/generator.js
[02:31:01] ✔ running tasks: [ 'git' ]

问题已解决!