在node.js中加载并执行外部js文件,并访问局部variables?

在node.js中做一个简单的include('./path/to/file')types的命令是否容易/可能?

我想要做的就是访问局部variables并运行脚本。 人们通常如何组织比简单的hello世界更大的node.js项目? (function完善的dynamic网站)

例如,我想有像这样的目录:

/models

/views

…等

只要做一个require('./yourfile.js');

将所有需要外部访问的variables声明为全局variables。 所以,而不是

var a = "hello"它会

GLOBAL.a="hello"或者只是

a = "hello"

这显然是不好的。 你不想污染全球范围。 build议的方法是export你的函数/variables。

如果你想MVC模式看看Geddy。

你需要了解CommonJS,这是一个定义模块的模式。 你不应该滥用GLOBAL范围,这总是一件坏事,你可以使用'exports'标记,就像这样:

 // circle.js var PI = 3.14; // PI will not be accessible from outside this module exports.area = function (r) { return PI * r * r; }; exports.circumference = function (r) { return 2 * PI * r; }; 

和将使用我们的模块的客户端代码:

 // client.js var circle = require('./circle'); console.log( 'The area of a circle of radius 4 is ' + circle.area(4)); 

这段代码是从node.js文档API中提取的:

http://nodejs.org/docs/v0.3.2/api/modules.html

另外,如果你想使用像Rails或Sinatra的东西,我build议快递(我不能发布的URL,在堆栈溢出羞辱!)

如果您正在为Node编写代码,那么使用Ivan所描述的Node模块是毫无疑问的。

但是,如果你需要加载已经写好的并且不知道节点的JavaScript,那么vm模块就是要走的路(而且肯定比eval更好)。

例如,这里是我的execfile模块,它在context或全局上下文中对path进行评估:

 var vm = require("vm"); var fs = require("fs"); module.exports = function(path, context) { var data = fs.readFileSync(path); vm.runInNewContext(data, context, path); } 

另请注意:加载了require(…)模块无法访问全局上下文。