Hapi 抱怨缺少已安装的插件依赖项
Hapi complains about a missing plugin dependency that is installed
启动我的程序时,我得到:
Error: Plugin routes-api-cruises missing dependency @hapi/nes
at new module.exports (/usr/src/app/node_modules/@hapi/hoek/lib/error.js:23:19)
at Object.module.exports [as assert] (/usr/src/app/node_modules/@hapi/hoek/lib/assert.js:20:11)
at module.exports.internals.Core._validateDeps (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:348:22)
at module.exports.internals.Core._initialize (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:320:14)
at module.exports.internals.Core._start (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:240:24)
at internals.Server.start (/usr/src/app/node_modules/@hapi/hapi/lib/server.js:523:27)
at startServer (/usr/src/app/server.js:12:21)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
不知道"Plugin x missing dependency y"是插件没有声明它使用的依赖,还是声明的依赖没有安装.
看起来插件声明了它的依赖关系:
exports.plugin = {
name: 'routes-api-cruises',
dependencies: ['hapi-mongodb', '@hapi/nes'], // <- there it is
...
}
看起来也安装了软件包:
$ find node_modules -iname 'nes'
node_modules/@hapi/nes
并且package.json
包括:
"dependencies": {
"@hapi/nes": "^11.2.1",
...
}
并且package-lock.json
包括:
@hapi/nes": {
"version": "11.2.2",
"resolved": "https://registry.npmjs.org/@hapi/nes/-/nes-11.2.2.tgz",
"integrity": "sha512-XGFfTQsBB7NnpIgVdnz36lrZjJlUgni0tLmcN4TWiYdCGxNr6+YRreQ6jdsGN3j8qfZ8yLBY0FsGkHBiMPKLAw==",
...
}
该代码使用 @hapi/glue
的 compose()
函数并传入要注册的插件列表,并且存在 @hapi/nes
。
我在 Hapi 源代码中找到 source of that error 并使用 Node inspector 在那里附加了一个断点。
函数_validateDeps
枚举了每个插件声明的依赖。它在插件注册地图 this.registrations
中查找这些内容。
在 this.registrations
中,@hapi/nes
简单地显示为 nes
。将插件依赖声明更改为简单的 nes
使查找工作。
启动我的程序时,我得到:
Error: Plugin routes-api-cruises missing dependency @hapi/nes
at new module.exports (/usr/src/app/node_modules/@hapi/hoek/lib/error.js:23:19)
at Object.module.exports [as assert] (/usr/src/app/node_modules/@hapi/hoek/lib/assert.js:20:11)
at module.exports.internals.Core._validateDeps (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:348:22)
at module.exports.internals.Core._initialize (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:320:14)
at module.exports.internals.Core._start (/usr/src/app/node_modules/@hapi/hapi/lib/core.js:240:24)
at internals.Server.start (/usr/src/app/node_modules/@hapi/hapi/lib/server.js:523:27)
at startServer (/usr/src/app/server.js:12:21)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
不知道"Plugin x missing dependency y"是插件没有声明它使用的依赖,还是声明的依赖没有安装.
看起来插件声明了它的依赖关系:
exports.plugin = {
name: 'routes-api-cruises',
dependencies: ['hapi-mongodb', '@hapi/nes'], // <- there it is
...
}
看起来也安装了软件包:
$ find node_modules -iname 'nes'
node_modules/@hapi/nes
并且package.json
包括:
"dependencies": {
"@hapi/nes": "^11.2.1",
...
}
并且package-lock.json
包括:
@hapi/nes": {
"version": "11.2.2",
"resolved": "https://registry.npmjs.org/@hapi/nes/-/nes-11.2.2.tgz",
"integrity": "sha512-XGFfTQsBB7NnpIgVdnz36lrZjJlUgni0tLmcN4TWiYdCGxNr6+YRreQ6jdsGN3j8qfZ8yLBY0FsGkHBiMPKLAw==",
...
}
该代码使用 @hapi/glue
的 compose()
函数并传入要注册的插件列表,并且存在 @hapi/nes
。
我在 Hapi 源代码中找到 source of that error 并使用 Node inspector 在那里附加了一个断点。
函数_validateDeps
枚举了每个插件声明的依赖。它在插件注册地图 this.registrations
中查找这些内容。
在 this.registrations
中,@hapi/nes
简单地显示为 nes
。将插件依赖声明更改为简单的 nes
使查找工作。