如何仅引用文件中的一个变量而不引用node.js中的所有导出?

时间:2018-01-05 20:20:05

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

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

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

但我想做这样的事情:

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

有一种称为导入的导入特定变量,但在节点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,
}

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

1 个答案:

答案 0 :(得分: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而不是浏览器运行时)。