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

Execute a file in global scope instead of returning exported object

本文关键字:返回 对象 范围内 全局 执行 文件      更新时间:2023-09-26

在NodeJS中,我只想执行一个文件,并允许它修改全局命名空间。我知道这不是最佳实践,如果我自己设计项目,我会确保每个模块都导出一个变量。

我正在将一个由脚本标记连接的结构不佳的SPA项目转换为节点,我希望以增量的方式这样做。

现在我有:

require('./three.js')

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

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

有没有一种优雅的方法可以做到这一点?

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

所以举个例子var THRE_74=需要('./THREE');

现在这个THREE_74.半球光()

你可以访问你正在做的事情。

如果你想让你的应用程序离开节点,而不是使用相同的布局(因为你正在转换SPA应用程序),然后创建你的index.html加载require.js文件(http://requirejs.org/docs/download.html)到script标记中,使您的所有文件在这个js文件之后调用(到那些文件中执行您现在所做的要求)。

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

我找到了这个片段。它在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>");