我正在和Node一起做一个项目.js和服务器端代码变得足够大,我想将其拆分为多个文件.似乎这已经在客户端进行了很长时间,开发是通过 for each 文件插入script个标记来完成的,而仅用于分发的是类似于"Make"的东西,用于将所有内容放在一起.我意识到把所有的服务器端代码封装起来是没有意义的,所以我不是在问如何做到这一点.我能找到的最接近使用的东西是require(),但是它的行为与浏览器中的script不一样,因为需要的文件不共享一个公共名称空间.

查看一些旧 node .js项目,比如Shooter个,似乎以前不是这样,或者我的代码中缺少了一些非常简单的东西.我需要的文件在编译时或运行时都无法访问全局调用命名空间.有没有简单的方法来解决这个问题,或者我们是否被迫让所有需要的JS文件完全独立于调用范围?

推荐答案

您不需要公共名称空间,因为全局变量是邪恶的.在 node 中,我们定义模块

// someThings.js

(function() {
    var someThings = ...;

    ...

    module.exports.getSomeThings = function() {
        return someThings();
    }

}());

// main.js

var things = require("someThings");
...
doSomething(things.getSomeThings());

您定义了一个模块,然后通过写入exports为您的模块公开了一个公共API.

处理这个问题的最好方法是依赖注入.您的模块公开了一个init函数,并将依赖项的对象散列传递到模块中.

如果你真的坚持要访问全球范围,那么你可以通过global次访问.每个文件都可以写入和读取global对象.同样,您不想使用globals.

Node.js相关问答推荐

如何在Node js中从MongoDB获取特定数据,使用GET方法?

需要关于基于角色授权的设计建议

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

EJS ForEach循环标记

Promise 和 Azure 语音转文本

DynamoDB 分页数据检索

为什么这个 module.export 函数如果我直接传递它就不起作用,但如果我将它包装在一个匿名函数中就可以工作

每个数组值在 mongodb 中查找一个文档

看起来这段代码try GET 请求发送的值变为空白

MERN 堆栈项目中的 React [create-react-app] 正在提供依赖项

什么是nestjs错误处理方式(业务逻辑错误vs.http错误)?

使 pm2 登录到控制台

Puppeteer 错误:未下载 Chromium 修订版

如何使用 mocha.js 模拟用于单元测试的依赖类?

使用 nvm-windows 时更新 npm

Passport 登录和持久会话

为什么我们要为 Angular 2.0 安装 Node.js?

Passport 的 req.isAuthenticated 总是返回 false,即使我硬编码 done(null, true)

mongoose 填充与对象嵌套