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

时间:2019-05-28 09:25:03

标签: javascript node.js express

我有这个文件夹结构。

    def save(self, *args, **kwargs):
        #self.date_created = timezone.now()
        # YOUR LOGIC HERE
        super(YOUR_OVERRIDING_MODEL , self).save(*args, **kwargs

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

/app.js
/src
 /routes
 /controllers

我可以将软件包打包放在一个地方(大多数可能在app.js中),而不是通过这种方式将其传递给routes文件夹中的每个文件,而不是在每个文件上都需要它。

3 个答案:

答案 0 :(得分:3)

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

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

  

我可以将软件包打包放在一个地方(大多数可能在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一样,因此您在其上创建的任何属性都将成为全局变量。)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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