1

プロジェクトに requirejs を改造しようとしていますが、断続的にファイルに「404 Not Found」が表示されます。

おおよそ、3 回または 4 回のリロードごとに、次のエラーが発生します。

GET http://localhost:8080/build/jquery.js 
Uncaught Error: Script error for: jquery

GET http://localhost:8080/build/touchSwipe.js
Uncaught Error: Script error for: touchSwipe

私のファイルは次のようになります。

config.js

require.config({
    paths: {
        'jquery': 'vendor/jquery',
        'touchSwipe': 'vendor/jquery.touchSwipe.min',
        'scripts': 'scripts/'
    },
    shim: {
        'touchSwipe': {
            deps: ['jquery']
        }
    }
});
require(['main']);

main.js

require(
    ['scripts/menu', 
    .. more js files .. ]);

私は grunt-contrib-requirejs を使用してファイルを最適化し、すべて正常に動作しているようです

Gruntfile.js

requirejs: {
    compile: {
        options: {
            baseUrl: "path/to/file/",
            mainConfigFile: "path/to/file/config.js",
            dir: 'path/to/build/',
            modules: [
                {
                    name: 'main'
                },
            ],
            uglify: {
                no_mangle: true
            },
        }
    }
}

...そして空白を埋めるために、私の main.hbs ファイルにはこのスクリプトタグがあります

<script data-main="/build/config" src="/js/vendor/require.js"></script>

私が言ったように、これはすべて正常に機能しており、さらにモジュールを導入しようとしています。特定のページにのみロードしたいモジュール。

関連するページの最後に次のコードを追加して、これを実行しようとしています

<script type="text/javascript">
    require(['scripts/page1']);
</script>

page1.js ファイルは次のようになります...

define(['jquery', 'touchSwipe'], function ($j) {
    ...
});

これらのエラーが表示されないときは、サイトは正常に動作しているようです。注意すべきもう 1 つの点は、Grunt タスクを介してコードを実行した場合にのみ発生するように見えることです。

問題は、エラーの URL が間違っていることです。jQuery は /build/ ではなく /build/vendor/ にありますが、touchSwipe はライブラリ用に定義したパスです。タイミングの問題のようです。新しいファイルの後に構成がロードされています。

4

1 に答える 1

0

私はそれを考え出した

次のように、モジュールの下のGruntでファイルを指定する必要があります

modules: [
    //First set up the common build layer.
    {
        //module names are relative to baseUrl
        name: 'config',
        include: [
            'jquery',
            'touchSwipe',
            'jquery-ui',
            'modernizr'
        ]
    },
    {
      name: 'scripts/page1',
      exclude: ['config']
    }
],

次に、構成ファイルをスクリプトタグに追加するのではなく、これを行いました

require(['./build/config'], function () {  
    require(['scripts/page1']);
});

そして私は追加しました

baseUrl: "build"

私の設定ファイルに、これでうまくいったようです

于 2015-03-25T09:53:39.390 に答える