需要来自node.js模块的“所有内容”

时间:2012-07-02 11:53:34

标签: javascript node.js dsl require

我正在写一个DSL,我想把所有模块中的所有内容放到当前的命名空间中,以便能够编写类似这样的内容

// I know it's not working.
// In python, I'd do: from mydsl import *
{*} = require('./mydsl');

node('London');
node('Paris');
edge('London', 'Paris');

以下是我尝试作为解决方法的一些版本

// In python: import mydsl as dsl
dsl = require('./mydsl');
dsl.node('London');

// In python: from mydsl import node, edge
{node, edge} = require('./mydsl');
node('London');

// Extend `this` with imported functions
_ = require('underscore');
_.extend(this, require('./mydsl'));
this.node('London');

由于我的DSL有很多关键字,因此使用{node,edge,...} = require会很笨拙。我更喜欢可以使用browserify移植到网络上的解决方案。

2 个答案:

答案 0 :(得分:2)

这是非常非常 BAD 的做法。

_ = require('underscore');
_.extend(global, require('./mydsl'));
node('London');

答案 1 :(得分:0)

您考虑使用with吗?

var mydsl = require('./mydsl');
with (mydsl) {
    node('London');
    node('Paris');
    edge('London', 'Paris');
}