ノードエコシステムの理解を深めるためにNodeJSのrequire()
関数がどのように機能するかを学習しています。module._compileの内部でNodeJSエラーが発生する
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' ] } It works!
モジュールがロードされないのはなぜですか?アドホックモジュールがロードされるのはなぜですか?
最後に、これは私に必要なものすべてを与えました。ありがとう!ここに来る人も関心がある場合は、期待どおりにモジュールに変数を追加することができます:モジュールの外側で_module.stuff = mystuffを使用します。モジュール内部ではmodule.stuffでアクセスします。 –