当前位置: 首页 > 面试题库 >

将“ Vanilla” Javascript库加载到Node.js中

柯宜年
2023-03-14
问题内容

有一些第三方Javascript库具有某些功能,我想在Node.js服务器中使用。(特别是我想使用找到的QuadTree
javascript库。)但是这些库只是简单的.js文件,而不是“ Node.js库”。

因此,这些库未遵循exports.var_nameNode.js对其模块期望的语法。据我了解,这意味着当您这样做时,module = require('module_name');或者module =require('./path/to/file.js');最终将得到一个没有公共可访问功能的模块,等等。

然后我的问题是“我如何将一个任意的javascript文件加载到Node.js中,这样我就可以利用其功能而不必重写它就可以了exports?”

我对Node.js还是很陌生,所以请让我知道我对它的工作方式是否有明显的了解。

编辑
:进行了更多的研究,现在我看到Node.js使用的模块加载模式实际上是最近开发的用于加载称为CommonJS的Javascript库的标准的一部分。它在Node.js的模块文档页面上说得很对,但直到现在我都没想到。

我的问题的答案可能最终是“请等到您的库的作者开始编写CommonJS接口或做该死的自我”。


问题答案:

有比使用evalvm模块更好的方法。

例如,这是我的execfile模块,该模块pathcontext或全局上下文中评估脚本:

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

可以这样使用:

> var execfile = require("execfile");
> // `someGlobal` will be a global variable while the script runs
> var context = execfile("example.js", { someGlobal: 42 });
> // And `getSomeGlobal` defined in the script is available on `context`:
> context.getSomeGlobal()
42
> context.someGlobal = 16
> context.getSomeGlobal()
16

其中example.js包含:

function getSomeGlobal() {
    return someGlobal;
}

此方法的最大优点是您可以完全控制已执行脚本中的全局变量:您可以传入自定义全局变量(通过context),并且脚本创建的所有全局变量都将添加到中context。调试也更容易,因为将使用正确的文件名报告语法错误等。



 类似资料:
  • 问题内容: 我正在开发应用程序,并且服务器当前已安装并且运行良好。 这是访问服务器时显示的index.html: 但是,导入那些位于同一目录中的javascript文件时,出现404错误“无法加载资源:服务器响应状态为404(未找到)”。 这是我的服务器代码: 谢谢! 问题答案: 如果HTML文件与脚本位于相同的路径,请使用相对路径,例如。如果仍然不起作用,则可能是Express的错误。 将以下代

  • 问题内容: 我有一个脚本,其中包含一些我想在REPL中使用的功能。 有没有办法让节点执行我的脚本,然后使用所有声明的全局变量跳入REPL,就像我可以使用or一样? 问题答案: 仍然没有内置功能可以提供您描述的确切功能。但是,也可以使用它来在REPL中使用命令,例如: 它会逐行加载文件,就像您在REPL中键入文件一样。与此不同,这会使用您加载的命令污染REPL历史记录。但是,它具有可重复的优势,因为

  • 问题内容: 不久前,我在Mac OSX上使用以下命令安装了Node.js版本0.2.1: 我最近安装了Homebrew,所以现在我更喜欢使用它来管理我的安装。我今天使用以下命令安装了Node.js版本0.4.5: 酿造节点 但是我注意到我仍然在这些目录中找到旧版本的Node.js: 卸载使用sudo make技术安装的Node.js的正确方法是什么? 提前致谢 问题答案: 没有“正确”的方法。该只

  • 问题内容: 我已经尝试将invRegex.py移植到node.js实现了一段时间,但是我仍然在努力。多亏了ret.js标记生成器,我已经有了正则表达式分析树,并且运行良好,但是以内存高效的方式实际生成和连接所有不同元素对我来说是非常具有挑战性的。为简单起见,可以说我有以下正则表达式: 喂养到产生下列输出( tabbified 取更小的空间): 考虑到我能够获取每个单独的令牌并产生所有有效的单独输出

  • 我想加载(要求)一个包含json模式的文件夹,这些模式具有基于其文件的引用。 换句话说,我有 并在同一文件夹中的另一个文件中: 这些模式在sperate文件中,现在应该加载到JS中,以便针对json对象进行验证。但是,文件夹内的引用应该仍然有效。 这就是为什么我的问题是,是否以及如何能够加载一个装满json文件的文件夹,而不需要中断引用。 这个库将使用这些模式来验证json对象:https://g

  • 我正在尝试将Reactome数据库加载到我的Neo4j桌面上。 我从Reactome网站下载了最新版本的数据库(https://reactome.org/dev/graph-database#GetStarted),我的Neo4j桌面的版本是1.3.4,对于创建的数据库,我使用的是Neo4j 4.1.1(也尝试了4.1.0)。 之后,我提取焦油。gz文件,并使用Neo4j Desktop中的终端使