gpt4 book ai didi

javascript - 如何在 NodeJS 中导入匿名闭包

转载 作者:搜寻专家 更新时间:2023-10-31 23:56:39 25 4
gpt4 key购买 nike

我正在编写一个 nodejs 脚本(将在 azure 管道中使用)来检查我的 Web 开发人员是否忘记重新生成 Web 应用程序中使用的对象契约。所以目标是读取他的文件并将其中的对象与存储在其他地方的最新对象版本进行比较。

该文件在全局对象(浏览器中的窗口)中附加一个匿名函数中的子对象,例如 https://medium.com/@tkssharma/javascript-module-pattern-b4b5012ada9f

我尝试了基于此处找到的“vm”模块的解决方案:Load "Vanilla" Javascript Libraries into Node.js

generatedModels.js

/***************************/
/* AUTO GENERATED via T4 */
/***************************/
(function(){
"use strict";

mynamespace = mynamespace || {};
mynamespace.factories = mynamespace.factories || {};
mynamespace.factories.models = mynamespace.factories.models || {};

mynamespace.factories.models.AdresseLibreModel_Factory = function() {
return {"CodePays":null,"ComplementAdresse":null, /*...*/};
};
})();

主要.js

var vm = require("vm");
var fs = require("fs");
var data = fs.readFileSync("generatedModels.js");
var window = {};
vm.runInNewContext(data, window, "generatedModels.js");

似乎我不能使用全局对象。在“runInNewContext”期间它总是失败--> 未定义我的命名空间 在 generatedModels.js:9:2

如何像在浏览器中一样使用该文件?如果需要,我可以修改T4模板来改变“generatedModels.js”文件的结构,但它仍然需要被浏览器使用。

最佳答案

因为 mynamespace 全局变量应该存在,所以它应该在沙箱中提供:

var sandbox = { mynamespace: {} };
vm.runInNewContext(data, sandbox, "generatedModels.js");

当脚本在浏览器中运行时,全局应该存在:

<script>
window.mynamespace = {};
</script>
<script src="generatedModels.js"></script>

关于javascript - 如何在 NodeJS 中导入匿名闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55498748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com