簡體   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