3

を介してRequireJSをブートストラップする関数を提供するinitファイルがありますrequire.config()。構成は、(ほとんど)次のようになります。

...

config =
    baseUrl: sysDir + 'lib/'
    paths:
        app: appDir + 'lib/'
        dep: sysDir + 'vendor/'
    deps: [
        'dep/underscore/underscore.min'
        'dep/jquery/jquery.min'
    ]

require.config config

このファイルはブラウザで使用されており、ノードでも使用したいと思います。私はヘルパーで同じことをしようとしていましたが、あまり運がありません。新しいVMコンテキストで仕様を実行する方法が原因で、何をすべきかよくわかりません。また、RequireJS構成をジャスミンノードに渡す明確な方法はありません。

何か案は?

4

2 に答える 2

1

必要な構成を specs ディレクトリのルートにある spec_helper.js に配置することで、これを少し機能させることができました。

define = require('requirejs');

(function () {
    var baseUrl = __dirname + '/../smoke'
    console.log('Configuring requirejs with baseurl: ' + baseUrl)

    define.config({
        'nodeRequire': global.require,
        'baseUrl': baseUrl
    });
})();

それが本当にあなたの問題を解決するかどうかはわかりません。

于 2012-06-29T17:44:07.657 に答える
0

jasmine-node は、requirejs のサンプル プロジェクトを提供します: https://github.com/mheevery/jasmine-node#requirejs

のようにテストを呼び出す場合> jasmine-node --runWithRequireJs --requireJsSetup tests/requirejs-setup.js testsは、requirejs-setup - ファイルに構成設定を追加できます。

それにもかかわらず、baseUrl 設定に問題がありました。requirejs-wrapper-template.js では、baseUrl が操作され、現在実行されているテスト ファイルに対して相対的に設定されます。これは次の図で確認できます。

if(alteredConfig.baseUrl){
    var base = baseUrl.replace(/\\/g, '/'),
        splitUrl = alteredConfig.baseUrl.replace(/\\/g, '/').split('/'),
        index = 0;

    for(; index < splitUrl.length; index++){
        if(splitUrl[index] === '..') {
            base = path.dirname(base);
        } else {
            base += '/' + splitUrl[index];
        }
    }

    alteredConfig.baseUrl = base;
}

これは、requirejs 構成から定義されたパスに問題を引き起こします。だから私は単にこのコードブロックをコメントアウトしました. そして今、それは私にとって非常にうまく機能します。

于 2014-03-21T09:46:53.670 に答える