在NodeJS中,我想简单地执行一个文件,并允许它对全局命名空间进行修改。我知道这不是最好的做法,如果我自己设计项目,我会确保每个模块都输出一个变量。
我正在将由脚本标签加入的结构不良的SPA项目转换为节点,我想逐步增加。
现在我有:
require('./three.js')
这是threejs的一个版本,它只是填充一个名为' THREE'的全局变量。与模块的内容。由于require的执行隐式地创建了一个闭包,因此不会为我创建全局变量。
所以我想做的就是运行整个js文件并允许它创建全局变量。
有优雅的方法吗?
答案 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>");