在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(…)
模块无法访问全局上下文。