1

アプリで Require を使用すると、ロード タイムアウト エラーが発生します。grunt と require オプティマイザを使用して、require ファイルを作成しています。私はwaitsecondsを設定し、ローカルでタイムアウトがなくなるのを見ましたが、本番環境ではまだ発生しています。grunt ファイルに waitseconds を設定しましたが、メインの js ファイルも試しましたが、アクティブなスクリプト ファイルにプッシュされる場所がわかりません。製品でこの値を見つけることができる場所を知っている人はいますか? grunt がタスクを実行するときに require.js ファイルに書き込まれず、require とオプティマイザーが実行されるときに main.js ファイルに含まれません。ブラウザはこの値をどこで取得しますか? prod の require.js ファイルに最初の 7 秒のタイムアウトが表示されますが、オプションが選択された場所が見つかりません。

これが私の必須タスクです:

 requirejs: {
        options: {
            baseUrl: ".",
            appDir: "js",
            waitSeconds: 40,
            findNestedDependencies: true,
            mainConfigFile: "js/common.js",
            dir: "../assets/js",
            paths: {
                "rs": "mains/recordsearch"
            },
            optimize: "none",
            // modules to be optimized and bundled
            // "include" and "exclude" can be used here
            // to add or ignore dependencies
            modules: [{
                name: "common"
            }, {
                name: "rs/home"
            }, {
                name: "commons/html5shim"
            }]
        },
        dev: {},
        prod: {
            options: {
                optimize: "uglify"
            }
        }
    },

そして私の「メイン」はjsページを必要とします:

requirejs.config({
  paths: {
    // libraries path
    "jquery": "libs/jquery",
    "jquery-ui": "libs/jquery-ui",
    "modernizr": "libs/modernizr.custom",

    // validation
    "boolean": "validation/custom/boolean",
    "comparefield": "validation/custom/comparefield",
    "expirationdate": "validation/custom/expirationdate",
    "securitycode": "validation/custom/securitycode",
    "fullname": "validation/custom/fullname",
    "zip": "validation/custom/zip",
    "ajaxval": "validation/framework/jquery.unobtrusive-ajax.min",
    "vsdoc": "validation/framework/jquery.validate-vsdoc",
    "validate": "validation/framework/jquery.validate.min",
    "unobtrusive": "validation/framework/jquery.validate.unobtrusive.min",

    // plugins
    "acmodal": "plugins/acmodal",
    "acbutton": "plugins/acbutton",
    "acnav": "plugins/acnav",
    "actooltip": "plugins/actooltip",

    // utils and polyfills
    "bridge": "utils/pluginbridge",
    "object.create": "polyfills/object.create",
    "counter": "utils/counter",

    // funnels
    "rs": "mains/recordsearch"
},
// The shim section allows you to specify 
// dependencies between non AMD compliant files.
shim: {
    "jquery": {
        exports: "$"
    },
    "modernizr": {},
    "acbutton": ["jquery", "object.create", "bridge"],
    "acnav": ["jquery", "object.create", "bridge", "modernizr"],
    "acmodal": ["jquery", "object.create", "bridge", "jquery-ui"],
    "actooltip": ["jquery", "object.create", "bridge", "counter"],
    "ajaxval": ["validate", "unobtrusive", "boolean", "comparefield", "expirationdate", "comparefield", "boolean", "fullname", "zip", "securitycode"]
},
});

require([
"jquery",
"ajaxval",
"actooltip",
"acbutton",
"acnav",
"acmodal",
"commons/errorhandling"
], function () {

//waiting until dom is loaded to load the page modules
$(function () {
    // the start module is defined on the body tag.
    // example: <body data-jspage="rs/main"> or <body data-jspage="rs/main, rs/common">
    var startModule = $("body").attr("data-jspage");
    var siteArea = $("body").attr("data-area");

    if (startModule) {
        require([startModule]);
    }
    if (siteArea === "FE") {
        require(["commons/signin"]);
    }
 });
});

フィードバックをお寄せいただきありがとうございます。

4

1 に答える 1

2

さらにテストした結果、waitSeconds を mainconfigFile に入れる必要があることがわかりました。この場合は、上に投稿した「メイン」js です。gruntfile とは対照的に、本番環境にあるそのファイルからページに読み込まれます。waitSeconds オプションを gruntfile に入れると、ノードでサイトを実行していない限り機能しません。grunt-require-contrib のドキュメントにはオプションとして記載されていますが、どのような場合に機能するかは定かではありません。grunt node パッケージの r.js スクリプトを調べたところ、そのファイルを変更しても、出力ファイルに送られるものには何も影響しませんでした。最適化とバンドルだけでした。エラーに waitSeconds 値を渡していくつかのテストを実行したところ、mainconfigFile の値を変更するとブラウザーに表示されることがわかりましたが、gruntfile タスクを変更しても何も起こりませんでした。

于 2013-11-13T03:28:49.317 に答える