2012-07-02 83 views
0

我正在寫一個DSL「一切」,我想把一切從所需的模塊到當前的命名空間,以便能夠寫出這樣的事情需要來自Node.js的模塊

// 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移植到網絡上的解決方案。

+0

downvoter,請留下你的理由評論 –

回答

0

您是否考慮使用with

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

這是一個非常非常非常非常非常的做法。

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

做的很真實...... – freakish

+0

這就是爲什麼我會做'_.extend(本地,要求( './看MyDSL'))'如果'本地'對象可用 –