Node.js 此nodejs项目如何引用共享库文件夹?

Node.js 此nodejs项目如何引用共享库文件夹?,node.js,express,Node.js,Express,我正在看这个项目,他们有多个节点项目,如: api project2 project3 shared 因此,各种项目引用共享文件夹,如: if (process.env.NODE_ENV === 'development') { const logging = require('shared/middlewares/logging'); middlewares.use(logging); } 并且logging.js文件位于共享文件夹中: // @flow // Log reque

我正在看这个项目,他们有多个节点项目,如:

api
project2
project3

shared
因此,各种项目引用共享文件夹,如:

if (process.env.NODE_ENV === 'development') {
  const logging = require('shared/middlewares/logging');
  middlewares.use(logging);
}
并且logging.js文件位于共享文件夹中:

// @flow
// Log requests with debug
const debug = require('debug')('shared:middlewares:logging');

module.exports = (
  req: express$Request,
  res: express$Response,
  next: express$NextFunction
) => {
  debug(`requesting ${req.url}`);
  next();
因此,我尝试在我的node/express项目中执行类似的操作,但出现以下错误:

未找到此依赖项:

* shared/middlewares/logging in ./src/middlewares/index.js

To install it, you can run: npm install --save shared/middlewares/logging

他们在项目中是否做了一些事情来实现这一点?

当然,如果您使用自己的模块,您必须显示所需的相对路径,例如

require('./path/to/custom/module/file')

// In this case smth like
require('../../../shared/middlewares/logging')
如果您不使用相对路径,它将搜索已安装的包,这就是为什么您在建议安装时出错的原因,因为找不到它

有几种方法可以告诉节点在自定义目录中搜索包。您可以查看示例。在spectrum项目中,它是通过设置NODE_PATH环境变量来配置的,您可以看到它并

在这些行中,您可以看到NODE_PATH=./,它告诉NODE在根目录中查找包


就是这样,希望现在一切都清楚了:

您的项目根目录中是否有logging.js文件的/middleware目录?@RashadIbrahimov是的。实际上,您必须显示相对路径,如require'/path/to/shared/middleware/logging',特别是smth,如require'/shared/middleware/logging'。如果您不使用相对路径,它会尝试在已安装的软件包中搜索,这就是为什么它建议您安装它,因为找不到它。在spectrum项目中,它可能以某种方式配置为查找根目录中的包,可能是某个地方的Web包配置,需要检查。@RashadIbrahimov他们使用backpad,覆盖在这里可能在这里?我没看见!他们使用了NODE_PATH env变量,请检查下面我的答案,这应该有助于您理解。