gpt4 book ai didi

javascript - 当我需要内部 module._compile 时出现 NodeJS 错误

转载 作者:行者123 更新时间:2023-11-28 14:45:55 24 4
gpt4 key购买 nike

我正在学习 NodeJS 的 require() 函数如何工作,以更好地了解节点生态系统。

我编写了一个使用 module._compile 来编译脚本的脚本。当我尝试在字符串中 require() 时,它犹豫不决......但它似乎有正确的路径。我做错了什么?

我想值得一提的是,我已将 json3 模块安装在 ./node_modules/ 的同一目录中。

脚本

我编写了这个脚本,它可以工作 - 直到我取消注释标记的行。

"use strict";

var json3 = require('json3');

console.log("require.main.filename:", require.main.filename);
console.log("require.main:", require.main);

var module = new module.constructor();
module._compile(`
"use strict";

console.log("require.main.filename:", require.main.filename);
console.log("require.main:", require.main);

// When I uncomment this, it breaks. Why?
//var json3 = require('json3');

module.exports = {
run: function () { console.log("It works!") }
};
`, require.main.paths[0]);

module.exports.run();

脚本输出

这是输出(当问题代码被注释掉时)。

require.main.filename: /home/user/tmp/tmp.js
require.main: Module {
id: '.',
exports: {},
parent: null,
filename: '/home/user/tmp/tmp.js',
loaded: false,
children:
[ Module {
id: '/home/user/tmp/node_modules/json3/lib/json3.js',
exports: [Object],
parent: [Circular],
filename: '/home/user/tmp/node_modules/json3/lib/json3.js',
loaded: true,
children: [],
paths: [Array] } ],
paths:
[ '/home/user/tmp/node_modules',
'/home/user/node_modules',
'/home/node_modules',
'/node_modules' ] }
require.main.filename: /home/user/tmp/tmp.js
require.main: Module {
id: '.',
exports: {},
parent: null,
filename: '/home/user/tmp/tmp.js',
loaded: false,
children:
[ Module {
id: '/home/user/tmp/node_modules/json3/lib/json3.js',
exports: [Object],
parent: [Circular],
filename: '/home/user/tmp/node_modules/json3/lib/json3.js',
loaded: true,
children: [],
paths: [Array] } ],
paths:
[ '/home/user/tmp/node_modules',
'/home/user/node_modules',
'/home/node_modules',
'/node_modules' ] }

为什么临时模块中的模块无法加载?

最佳答案

你的代码中有两件事。当你这样做时

var module = new module.constructor();

您丢失了原始模块对象,您不应该这样做。接下来要了解确切的问题是什么,您应该设置环境变量 NODE_DEBUG=module。这将为您提供后台发生的情况。执行此操作后,您会收到一条导入消息

MODULE 11063: looking for "json3" in []

这意味着没有为模块加载设置路径。所以你也应该添加路径。以下是更新后的代码

"use strict";

var json3 = require('json3');
var os = require("os");
console.log("require.main.filename:", require.main.filename);
console.log("require.main:", require.main);

var _module = new module.constructor();
_module.paths = module.paths;

_module._compile(`
"use strict";

// console.log("require.main.filename:", require.main.filename);
// console.log("require.main:", require.main);

//When I uncomment this, it breaks. Why?
var json3 = require('json3');

module.exports = {
run: function () { console.log("It works!") }
};
`, __dirname + "/dynamic_code_loaded_at_run_time.js");

_module.exports.run();

此外,_compile 的第二个参数是正在加载的文件名,因此您不应为其提供路径,而应提供文件名。现在你得到了正确的输出

It works!

关于javascript - 当我需要内部 module._compile 时出现 NodeJS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351318/

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