繁体   English   中英

Node.js Express.js使NPM软件包在整个项目中可用

[英]Nodejs expressjs make npm package available throughout the project

我有这个文件夹结构。

/app.js
/src
 /routes
 /controllers

在路线文件夹中,我有一堆js文件。 所有这些文件都需要像这样的护照js包

const passport = require('passport');

除了执行此操作外,我是否可以将程序包放在一个位置(大多数可能在app.js中),然后以某种方式将其传递到routes文件夹中的每个文件,而不是在每个文件中都需要它。

可能存在特定于通行证/快递的解决方案(例如,将通行证作为中间件安装一次),但通常会回答有关模块的问题:

在使用该模块的模块中要求模块是一种标准做法,可以清楚地表达模块之间的依赖关系,因此通常不必避免这样做。

除了执行此操作外,我是否可以将程序包放在一个位置(大多数可能在app.js中),然后以某种方式将其传递到routes文件夹中的每个文件,而不是在每个文件中都需要它。

您有两种选择:

  • 如果所有这些文件还都具有其他导入功能,则可以创建一个需要所有这些内容的汇总模块,然后将其用作导出。 然后您的文件将执行以下操作:

     const {passport, anotherThing, yetAnotherThing} = require("./the-rollup-module"); 

    代替

     const passport = require("passport"); const anotherThing = require("another-thing"); const yetAnotherThing = require("yet-another-thing"); 

    汇总看起来像这样:

     module.exports.passport = require("passport"); module.exports.anotherThing = require("another-thing"); module.exports.yetAnotherThing = require("yet-another-thing"); 
  • (我不建议这样做。)可以通过将其放入输入脚本中来使其成为全局变量:

     global.passport = require("passport"); 

    暴露passport作为一个全局变量,所以你的模块可以只使用passport而不require荷兰国际集团它。 (默认的global变量是对全局对象的引用,就像浏览器上的window一样,因此您在其上创建的任何属性都将成为全局变量。)

    我不建议这样做,因为这样就不再明确定义模块之间的依赖关系。

无论您require()一个模块,它都只会被加载一次。 在多个文件中需要一个模块没有错,实际上,这基本上是模块系统设计为工作的方式。

如果路由文件夹中的文件未使用快速路由器,您可以选择导出导出接受护照和应用程序对象的功能,例如

module.exports = function(app, passport) {
  app.get('/', (req, res) => {
      res.json('some route');
  });
}

然后,您只需要在app.js / server.js中一次使用护照,并将同一对象传递到每条路线

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM