在全局范围内执行文件,而不是返回导出的对象

时间:2016-03-23 21:16:37

标签: javascript node.js require

在NodeJS中,我想简单地执行一个文件,并允许它对全局命名空间进行修改。我知道这不是最好的做法,如果我自己设计项目,我会确保每个模块都输出一个变量。

我正在将由脚本标签加入的结构不良的SPA项目转换为节点,我想逐步增加。

现在我有:

require('./three.js')

这是threejs的一个版本,它只是填充一个名为' THREE'的全局变量。与模块的内容。由于require的执行隐式地创建了一个闭包,因此不会为我创建全局变量。

所以我想做的就是运行整个js文件并允许它创建全局变量。

有优雅的方法吗?

2 个答案:

答案 0 :(得分:0)

您正在处理使用节点服务器运行的单页应用程序。那你为什么不试试module.exports =这样你就可以在你提供的名称空间下看到它。

这样的例子 var THREE_74 = require('./ three');

现在这个THREE_74.HemispherLight()

你可以正常访问你所做的事情。

如果您想将应用程序从节点中移出而不是使用与现有相同的布局(因为您正在转换SPA应用程序),然后创建index.html,请将require.js文件(http://requirejs.org/docs/download.html)加载到脚本标记生成所有文件,而不是在此js文件之后调用(在这些文件中执行require,就像现在一样)。

然后运行单行服务器python -m SimpleHTTPServer并在浏览器上运行简单:)

答案 1 :(得分:0)

我能够找到这个片段。它在Node中不是原生的,但它作为临时解决方案很有效!

var fs = require('fs');
var vm = require('vm');
var includeInThisContext = function(path) {
    var code = fs.readFileSync(path);
    vm.runInThisContext(code, path);
}.bind(this);
includeInThisContext("<PATH_TO_FILE>");