0

私のアプリケーションでは、デプロイごとに異なるバージョン名を使用する環境構成を使用して、アプリケーションが適切にキャッシュ無効化され、ユーザーのブラウザー キャッシュに古いバージョンのコードが含まれないようにしたいと考えています。このガイドに従っていることに注意してください。

したがって、main.js では、何かを行う前に、現在の日付/時刻を使用して環境構成ファイルのキャッシュを破壊する一般的な構成で require.config を呼び出し、環境構成が読み込まれた、環境を使用します。 urlArgs の一部として「config.version」を使用して、新しくデプロイされたコードが含まれ、古いバージョンではないことを保証します。構成ファイルのオブジェクトには、アプリケーション全体で使用される他のプロパティ (Google アナリティクス アカウント番号など) があることに注意してください。

環境/構成の依存関係をセットアップできるようにする最初のrequire.configを削除すると、r.jsビルドファイルは問題ないように見えますが、再度追加すると、3番目のグループ化に使用しているインフラストラクチャJSモジュールが削除されます-party スクリプトは、アンダースコア ライブラリ (または、そこに含めるライブラリ) が見つからないと言って窒息します。environment/config を含めずに 2 つの require.config 呼び出しを行ったとしても、同じエラーが発生することに注意してください。2 つの require.config 呼び出しでこのエラーが発生する理由はありますか? 助けてくれてありがとう。

//Error:
Error: ENOENT, no such file or directory '<%root_folder%>\dist\js\underscore.js'
    In module tree:
        infrastructure

私のメインJSファイル

//main.js
require.config({
  baseUrl: "js",
  waitSeconds: 0,
  urlArgs: "bustCache=" + (new Date).getTime()
});
require(["environment/config"], function(config) {
  "use strict";
  require.config({
    urlArgs: "bustCache=" + config.version,
    baseUrl: "js",
    waitSeconds: 0,
    paths: {
      underscore: "lib/lodash.underscore-2.4.1-min",
    },
    shim: {
      "underscore":{
        exports : "_"
      }
    }
  });
  //commented out, b/c not needed to produce the error
  //require(["jquery", "infrastructure"], function($) {
    //$(function() {
      //require(["app/main"], function(app) {
        //app.initialize();
      //})
    //});
  //});
});

そして、ここにビルドファイルがあります...

//build file
({
    mainConfigFile : "js/main.js",
    appDir: "./",
    baseUrl: "js",
    removeCombined: true,
    findNestedDependencies: true,
    dir: "dist",
    optimizeCss: "standard",
    modules: [
        {
            name: "main",
            exclude: [
                "infrastructure"
            ]
        },
        {
            name: "infrastructure"
        }
    ],
    paths: {
        "cdn-jquery": "empty:",
        "jquery":"empty:",
        "bootstrap.min": "empty:"
    }
})

ここinfrastructure.js

 define(["underscore"], function(){});

config ファイル (Google アナリティクスのアカウント番号やその他の環境固有の情報など、より多くのキーが含まれます。)

//config.js
define({version:"VERSION-XXXX", cdn: { jquery: "//path-to-jquery-1.11.0.min" }});

私が実行しているコマンド:「r.js -o build.js」

4

1 に答える 1

1

わかりました、はい、それは 2 つのrequire.config呼び出しの問題です。実行時に config を複数回呼び出してもまったく問題ありません。ただし、ビルド時r.jsは、呼び出しに従うことができません。したがって、ビルドがその後の呼び出しに依存している場合、問題が発生します。require.config

への 2 番目の呼び出しにrequire.configは、最初の呼び出しの後に読み込まれたものに基づいて計算された値が含まれていないことがわかりurlArgsますurlArgs

于 2014-10-15T16:21:32.943 に答える