3

jasmine 2.0.0 スタンドアロン プロジェクトの関数を次に示します。

function getJasmineRequireObj() {
    if (typeof module !== "undefined" && module.exports) {
        return exports;
    } else {
        window.jasmineRequire = window.jasmineRequire || {};
        return window.jasmineRequire;
    }
}

標準のrequireメソッドを使用すると、モジュールのプロパティが定義されると思います。次のように VM モジュールを使用してこのファイルをロードすると、モジュールのグローバル プロパティが未定義になります。

var fs = require('fs');
var vm = require('vm');
var jasmineFile = fs.readFileSync(__dirname + '/jasmine.js');
vm.runInThisContext(src, jasmineFile);

これは VM モジュールの予期された動作ですか、それとも欠陥ですか?

4

1 に答える 1

14

これは予期される動作です。コードは同じコンテキストで評価されますが、同じスコープでは評価されないためmodule、 、exportsおよびその他は未定義です。次のようなことができます。

var m = require('module')
var src = 'module.exports = 42'
var res = require('vm').runInThisContext(m.wrap(src))(exports, require, module, __filename, __dirname)
console.log(module.exports)

しかし、それを行うことにはあまり意味がありrequireません。

于 2014-01-03T10:57:04.807 に答える