【问题标题】:How to reference only one variable from file and not all exports in node.js?如何从文件中仅引用一个变量而不是 node.js 中的所有导出?
【发布时间】:2018-06-15 16:28:15
【问题描述】:

在我的 server.js 中,我需要检查 global.js 中的一个变量是否为真(使用 if 语句),但稍后在该文件中我使用了窗口,并且在服务器中未定义窗口文件。这意味着我不能像这样要求整个文件:

var global = require('../client/js/global');

但我想做这样的事情:

require thisSpecificVariable from ('../client/js/global');

有一个叫做 import 的东西可以导入一个特定的变量,但在节点 8 中不受支持。

所以再澄清一次,这就是我想要做的:

if (this is true) {
    call this function
}

但我收到一条错误消息:“参考错误:窗口未在 bla bla、bla bla、bla bla 等处定义。”这些地方大多以模块开头。

我的 global.js 是这样的(一小部分为例):

module.exports = {
    freeMove: true,
    cashing: false,
    gameStarted: false,
    chatHidden: false,

    // Canvas
    screenWidth: window.innerWidth,
    screenHeight: window.innerHeight,
}

是否可以引用一个特定变量或忽略包含窗口的变量?我该怎么做?

【问题讨论】:

    标签: javascript node.js html module socket.io


    【解决方案1】:

    您只能从导出的对象中获取一项,如下所示:

    var gameStarted = require('../client/js/global').gameStarted;
    

    但是,如果您尝试在没有定义 window 对象的环境中运行此模块,这仍然会产生错误,因为无论您想要哪个确切的导出,整个模块都会被初始化。要解决这个问题,您必须修复 global.js 本身,这样它就不会在未定义时尝试引用 window

    例如,您可以在 global.js 中执行此操作:

    module.exports = {
        freeMove: true,
        cashing: false,
        gameStarted: false,
        chatHidden: false,
    };
    
    if (typeof window !== "undefined") {
        module.exports.screenWidth = window.innerWidth;
        module.exports.screenHeight = window.innerHeight;
    }
    

    然后,当 window 对象不存在时(可能是从 node.js 而不是浏览器运行时),您不会尝试引用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多