【问题标题】:Dynamic require in NodejsNodejs中的动态需求
【发布时间】:2015-05-22 21:08:27
【问题描述】:

我需要一个具有自调用函数的 NodeJS 库,这会导致错误,因为它会查找当时未初始化的对象。

我想在初始化该对象时动态地require 这个库。

有没有办法动态require/ 加载库?

这是所需库的一部分: https://github.com/sakren/node-google-maps/blob/develop/lib/Google.js#L5

实际上我想在窗口对象存在时要求(客户端渲染)。

所以是这样的:

'use strict';

var React = require('react');
var Map = require('./map.jsx');
var Common = require('../common/common');
var MapStatic = require('./map-static.jsx');

exports.type = function() {
    return 'map';
};

exports.jsx = function(data) {
    if (Common.isServerSide()) {
        return (<MapStatic data={data}/>);
    } else {
        return (
            <Map data={data}/>
        );
    }
};

exports.transform = require('./map-transform.js');

代码看起来很奇怪的原因是我正在使用反应。

【问题讨论】:

  • 您可以向我们展示一些代码以帮助更好地说明您的问题吗?初始化对象后,您应该只需要该库。
  • @Brennan 代码已添加。当且仅当 else 语句是要走的分支时,我希望图书馆是必需的。
  • require() 只是一个普通函数。如果需要,您可以在 if 语句中调用它。除此之外,我真的不明白这里的问题是什么。
  • 为了便于理解,让我重新表述问题:假设您有 2 个文件。 File A 需要 File B 在 if-else 块的 else 部分,它永远不会到达。在File B 中有一个自调用函数,它唯一的工作就是抛出一个错误。因此,在服务器端,NodeJS 无论如何都无法达到要求 File B 的事实,运行通过 File B 并引发错误。
  • 您是否考虑过分叉存储库并使函数不自调用?我相信这会解决你的问题。

标签: node.js require


【解决方案1】:

在 nodeJS 中,require 可以随时随地使用,没有太多限制 AFAIK。

在运行时需要时抛出哪个错误? 在你的 else 分支中。

【讨论】:

  • 当需要map.jsx 时,其中有一个自调用函数会引发错误(它会检查某些内容并引发错误,这没什么问题)。我要说的是,即使我们将 require 语句放在 else 部分,它也会需要它,尽管它不应该这样做。当它没有到达 else-if 语句的那部分时,我怎样才能使它不需要它。
【解决方案2】:

试试下面的。

requires = {}
function getter(key) {
  if(!requires[key]){
    requires[key] = require(key)
  }
  return requires[key]
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 2017-12-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
相关资源
最近更新 更多