4

メインに次のようなrequire.configがあります。

require.config({
baseUrl:'scripts/',

 paths:{  
        jquery:'shell/lib/jquery/jquery-1.7.1'
     // many libraries and modules are aliased here

 },
 map:{
  '*':{
      'underscore':'shell/lib/underscore/underscore'
            // a few other modules are mapped here
  }
 }     

});

これを行ったのは、マップで定義されたファイルが相対パスを使用して内部依存関係 (それぞれのフォルダー内) を使用しているためです。オプティマイザーを実行すると、パスで定義されたモジュールがモジュール ID として保存されます。たとえば、jquery が jquery として保存されマップ内のモジュールは完全なパスを取得します。たとえば、「アンダースコア」ではなく「シェル/lib/アンダースコア/アンダースコア」として保存されます。 .

他のモジュールでも「アンダースコア」を使用しており、最適化されたファイルには「シェル/ライブラリ/アンダースコア/アンダースコア」ではなく「アンダースコア」が含まれているため、これが問題を引き起こしています。

マップ構成または不足している何かを与えるときに最適化する特定の方法はありますか? 修正方法を教えてください。

ありがとう

4

1 に答える 1

1

問題がよくわかりません:

他のモジュールでも「アンダースコア」を使用しており、最適化されたファイルには「シェル/ライブラリ/アンダースコア/アンダースコア」ではなく「アンダースコア」が含まれているため、これが問題を引き起こしています。

underscoreこれは予想される動作のようです。すべてのモジュールのパスにマップしました。したがって、基本的にはr.js、依存関係を見つけるたびに、underscoreそれを に書き換えshell/lib/underscore/underscoreます。モジュールが「内部パス」を使用していて、反対のことをしたい場合 (それらを参照するようにするunderscore)、反対のマッピングを行う必要があります。

 'some/path/underscore': 'underscore'

その場合、すべてのモジュールが同じアンダースコア モジュールを指します。アンダースコアに奇妙なパスを使用するものでさえ。

r.jsがモジュールをディスクに書き込む方法を制御する必要があるという極端なケースです。プロパティを使用できonBuildWriteます ( https://github.com/jrburke/r.js/blob/master/build/example.build.js#L517を参照)。

例えば:

onBuildWrite: function ( moduleName, path, contents ) {
    if ( path === './src/somefile.js' ) {
          return contents.replace(/^define\('src\/underscore'/, "define('underscore'");
    } else {
          return contents;
    }
}

この例は、 に伝える「ハック」ですr.js: を処理するとき、 (これは正確に map で行うことですが、厄介なことを行うためにどのように使用できるかを示すためのものです)somefile.jsに置き換えます。src/underscoreunderscoreonBuildWrite

于 2013-09-14T19:04:18.697 に答える