1

プロジェクトの FUBAR ディレクトリ構成により、そのプロジェクトの JS スクリプトを再編成するのに時間を費やしました。このプロジェクトはrequirejsを使用しており、再編成前は素晴らしく機能していました。ただし、呼び出し時に何もロードされず、実行時にコンパイル (r.js オプティマイザーを使用) されませんが、コンパイルは問題なく完了します。私はチェック、ダブルチェック、トリプルチェックを繰り返し、そして今、スタックオーバーフローについて別の目を求めることに屈しました。

RequireJS の使用: 2.1.4 および r.js 2.1.4

以下は私の構成です:

build-js.js (オプティマイザに使用)

var requirejs = require('requirejs');

var config = {
    baseUrl: './public/js',
    mainConfigFile: './public/js/config/config.js',
    paths: {
        'requireLib': 'library/require'
    },
    out: ".public/js/minified/main.js",
    name: "minified/main",
    wrap: false,
    preserveLicenseComments: false,
    deps: ["app/main","modules/movie","modules/theatre"]
};

requirejs.optimize(config);

config.js

// Set the require.js configuration for your application.
require.config({
    paths: {
        // JavaScript folders
        libs: "library",
        plugins: "plugin",
        app: "app",
        adminlibs: "../adminassets/js/plugins/ui",

        // Libraries
        jquery: "library/jquery",
        jqcookie: "library/jquery.cookie",
        jqui: "../adminassets/js/plugins/ui/jquery-ui-1.10.0.custom.min",
        jqezmark: "library/jquery.ezmark",
        jqcolor: "library/jquery.color",
        underscore: "library/underscore-amdjs",
        backbone: "library/backbone-amdjs",
        chosen: "library/chosen.jquery", 
        moment: "library/moment",

        // Site Components 
        site: "app/site",
        sitediscussion: "app/site-discussion",
        namespace: "app/namespace",

        // Plugins
        text: "plugin/text", 
        async: "plugin/async", 
        use: "plugin/use",
        datetimepicker: "../adminassets/js/plugins/ui/jquery.datetimepicker",
        ajaxfileupload: "../adminassets/js/plugins/uploader/jquery.ajaxfileupload"
    },

    shim: {
        'chosen': ['jquery'],
        'jqcookie': ['jquery'],
        'jqui': ['jquery'],
        'jqezmark': ['jquery'],
        'jqcolor': ['jquery'],
        'site': {
            deps: ['jquery','jqezmark','chosen','underscore','namespace','jqui','jqcookie'],
            exports: 'site'
        },
        'sitediscussion': {
            deps: ['jquery', 'underscore'],
            exports: 'sitediscussion'
        },
        'jquifull' : ['jquery'],
        'datetimepicker' : ['jqui'],
        'ajaxfileupload' : ['jquery'],
        'backbone': ['underscore','jquery']
    },

    // Initialize the application with the main application file
    deps: ["app/main"]
});

ファイル構造は次のとおりです。

{サイトルート}/public/js

ディレクトリが含まれています:

アプリ構成ライブラリの縮小されたモジュール プラグイン テンプレート

上記の build-js および config.js にリストされているすべてのファイルは、予期されたフォルダーにあることが確認されています。

requirejs は次のように呼び出されます。

開発マシン (現在セットアップをテストしています):
data-main="/js/config/config" src="/js/library/require.js"

本番環境 (現在、縮小/メイン ファイルは作成されていませんが、作成されるはずです)
data-main="/js/minified/main" src="/js/library/require.js"

誰かが私が間違っているかもしれないことを見ることができますか? ここでも、上記の 2 つのファイル (build-js.js と config.js) を除いて、サイト本体や JavaScript などに変更はありません。唯一の変更点は、ディレクトリ構造内でファイルが物理的に移動されたことです。その結果、どこかにパスの問題があることはほぼ確実ですが、それを見つけることができないようです。ヘルプ?

4

1 に答える 1

1

解決策が見つかりました。「/js/config/config」のrequirejs include scriptタグのdata-main属性を介して構成ファイルを参照していました。/public/js のベース パスを宣言しましたが、システムはまだ /js/config/ をベース パスとして使用しようとしていました (requirejs のドキュメントに記載されているように、それ以外の場合はベース パスは宣言されません)。config.js ファイルを /js に移動し、data-main を /js/config に変更したところ、すべてのパスが適切に機能し、base-path /js を参照するようになりました。

ちなみに、私は Zend Framework とエラー処理を使用していたため、ファイルの読み込みに失敗していることに気付きませんでした。404 エラーは発生せず、開発ツールの [ネットワーク] タブには、すべての .js ファイルの読み込みに成功したことが示されました。 .js コンテンツよりも。

于 2013-02-20T16:24:18.907 に答える