Итак, две вещи в вашем коде. Когда вы это сделаете
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
Также вторым параметром _compile
является загружаемое имя файла, поэтому вы не должны указывать путь, а не имя файла. И теперь вы получаете правильный результат
It works!