0
// conifg.js
require.config({
  paths: {
    'main': 'main',
    'socketio': './libs/socket.io/socket.io',
    'plotly': './libs/plotly/plotly-latest.min',
    'renderDataToPlotly': './scripts/renderDataToPlotly',
    'jquery': './libs/jquery/jquery-2.1.4.min',
    'jqueryUI': './libs/jquery/jquery-ui-1.11.4.custom/jquery-ui.min',
    'sliders': './scripts/sliders',
    'makePlotlyWindowResponsive': './scripts/makePlotlyWindowResponsive'
  },
  shim: {                  
    'jqueryUI': ['jquery'] 
  }
});

require(['main']);

// main.js
define([
  'jquery',
  'jqueryUI',
  'socketio',
  'sliders',
  'makePlotlyWindowResponsive',
  'renderDataToPlotly'
  ],
  function($, ui, io, sliders, makePlotlyWindowResponsive, renderDataToPlotly) {
    //
  }
);

// renderDataToPlotly.js and makePlotlyWindowResponsive.js
define(['plotly'], function() {

});

ページをロードすると、このロード順序が得られ ここに画像の説明を入力 ます。私はrequirejsの仕組みを理解しているので、でエラーを推測しますが、何も得られません。すべてが機能します。makePlotlyWindowResponsive.jsplotly-latest.min.jsPlotly is not definedmakePlotlyWindowResponsive.js

requirejs とその仕組みを理解したい。

質問 1 : どうしてエラーが発生しないのですか?

質問 2 : つまり、読み込み順序に関係なく、ページが完全に読み込まれる前にファイルが読み込まれた場合、エラーは発生しないということですか?

御時間ありがとうございます!

4

2 に答える 2

1

あなたが目撃した相対的な順序とplotly.min.jsそれに依存するモジュールが必要です。RequireJS には、フェッチさplotly.min.jsれるまでmakePlotlyWindowResponsive、またはフェッチされるまでフェッチする理由がありませんrenderDataToPlotly

用語上の注意: ネットワーク上で HTTP クエリを発行するアクションを「フェッチ (モジュール)」と呼び、モジュールのファクトリ関数を実行するアクションを「定義 (モジュール)」と呼びます。「ロード」という用語はあいまいすぎます。

何が起こるか:

  1. が必要ですmain。したがって、RequireJS fetches main.

  2. RequireJS は in を実行definemainます。ファクトリ (コールバック) は、依存関係自体が定義されるまで実行できません。したがって、依存関係のフェッチを開始します。このフェッチは任意の順序で実行できます。依存関係には と がmakePlotlyWindowResponsiveありrenderDataToPlotlyます。

  3. RequireJS は と をフェッチmakePlotlyWindowResponsiverenderDataToPlotlyます。(相対的な順序は関係ありません。)

  4. RequireJS は、またはdefineのいずれかmakePlotlyWindowResponsiveを実行しますrenderDataToPlotlyここで、に解決されるモジュールを取得する必要があることを学習します。plotly./libs/plotly/plotly-latest.min.jsこの時点まで、RequireJS は何plotlyが必要になるかわかりません。の中にあるという事実はpaths、ロードをトリガーするための十分な条件ではありません。

  5. RequireJS フェッチ./libs/plotly/plotly-latest.min.js.

于 2016-08-07T11:29:29.317 に答える