我们希望使用AsyncAPI来记录我们的RabbitMQ消息。因此,我们安装了asyncapi/generator作为npm依赖项。
如果你看一下package.json
,你会发现它引用npmi作为依赖项,而依赖项又引用全局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?
如果您运行ag
,您最初一定是用npm安装的,对吗?所以npm很可能已经在这台机器上了。
当您将生成器作为依赖项,并且很可能使用nvm时,我只在windows上看到了您所遇到的错误。
解决方案是这样的,所以手动碰撞global-npm
以在npmi
中修复此问题。这是一个变通方法,从长远来看,我认为我们需要从生成器中消除npmi
依赖性,我认为
我们在使用安装node/npm的maven前端插件的CI/CD管道中才遇到这个问题。npm位于CCD_ 7。这不是AsyncAPI查找npm的位置。为了解决这个问题,我们将npm-cli.js(即npm(链接到maven前端插件到一个众所周知的地方,AsyncApi在那里查找npmnode_modules/.bin
。
- ln -sf "$(pwd)/node/node_modules/npm/bin/npm-cli.js" "$(pwd)/node_modules/.bin/npm"