1
のは、私はこのようになりますライブラリモジュールがあるとしましょう:パス機能
module.exports = {
increment: function() {
count++;
}
}
そして、私はこのようになり、動的に生成されたスクリプトでそれを使用したい:
サンドボックス内でそれを渡すこと
(function() { lib.increment(); })();
:
var sandbox = {
count: 1
lib: require('./lib')
}
var script = new vm.Script('(function() { lib.increment() })();');
script.runInNewContext(sandbox);
私はに実行する明白な問題は、私は一方ではのrequことができないということです"count"はlib.jsで定義されていないため、 "lib"をireしてください。一方、 "lib.js"ファイルのエクスポートよりも上にvar count
を定義すると、この新しいcount
変数はサンドボックス内の変数の代わりに影響を受けます。生成されたファイル
- )(evalのVMと使用していないにも必要()「LIB」は、外部ファイルで定義した:ここで
は、私が尊敬したい制約があります
- 自動的に生成されたスクリプトの修正は、そう
lib.increment.apply(context)
または類似
のない使用私がこれまでに見つけた唯一の解決策はlib
楽しさを付加することではありません生成されたスクリプト内の文字列を文字列として返すか、またはオブジェクトに直接定義することができます。これはあまり望ましくないオプションです。
require
呼び出しでは、変数のコンテキストを渡す方法はないようです。
はなぜちょうど '取得/設定&インクリメント方式/ wのオブジェクトを返す関数であるexports'持っていませんか? –
また、エクスポートをコンテキストをとる関数にすることもできます。次に 'require( './lib')({count:1})'を実行すると、 'increment'関数を使ってオブジェクトを返します。 –
@MikeCそれでは、あなたが尋ねることを恐れるべきではないという理由から、それは実際には非常に良い提案です! –