可以安装 `npm` 作为依赖吗?

时间:2021-01-14 10:03:49

标签: node.js npm asyncapi

我们想使用 AsyncAPI 来记录我们的 RabbitMQ 消息传递。因此,我们安装了 asyncapi/generator 作为 npm 依赖项。

如果您查看 package.json,您会发现它引用 npmi 作为依赖项,而后者又引用了 global-npm。如果我们要运行它,需要一个全局安装的节点和 npm。

现在,如果我们在没有全局安装 npm 的机器上运行生成器 ($ ag ./docs/asyncapi.yaml @asyncapi/html-template --output ./docs/asyncapi/ --force-write),则会出现以下错误消息:

/path/to/project/node_modules/global-npm/index.js:13
  throw err
  ^

Error: Cannot find module 'npm'
    at throwNotFoundError (/path/to/project/node_modules/global-npm/index.js:11:13)
    at /path/to/project/node_modules/global-npm/index.js:39:5
...

作为一种解决方法,我们将 npm 本身声明为一个依赖项:

"dependencies": {
    "@asyncapi/generator": "^1.1.4",
    "@asyncapi/html-template": "^0.15.4",
    "@asyncapi/markdown-template": "^0.11.1",
    "npm": "^6.14.9",
    ...

我从未见过这样的事情。这是可以接受的还是我们需要在我们的机器上单独安装我们的 npm?

2 个答案:

答案 0 :(得分:1)

如果您运行 ag,您一开始一定是用 npm 安装的吧?所以 npm 很可能已经在这台机器上。

您遇到的错误,我只在 Windows 上看到过,当您将生成器作为依赖项时,并且很可能您使用了 nvm。

解决方案是 this,因此手动碰撞 global-npm 以在 npmi 中修复 this。这是一种解决方法,从长远来看,我认为我们需要摆脱对生成器的 npmi 依赖

答案 1 :(得分:0)

我们只有在使用 maven-frontend-plugin 安装 node/npm 的 CI/CD 管道中遇到这个问题。 npm 位于 java.lang.OutOfMemoryError: GC overhead limit exceeded。这不是 AsyncAPI 查找 npm 的位置。为了解决这个问题,我们将 npm-cli.js(即 npm)从 将 maven-frontend-plugin 放到 AsyncApi 查找 npm node/node_modules 的众所周知的地方。

node_modules/.bin

相关问题