簡體   English   中英

RequireJs無法隨機加載腳本

[英]RequireJs fail to load scripts randomly

我有一個HTML模板(來自themeforest),其中包含許多jQuery插件和一個main.js,在其中為模板進行了實例化和配置。 我正在基於該模板創建AngularJS應用程序,並且正在使用RequireJS加載腳本。 在模板的index.html中,加載我的require-config.js文件。 80%的時間,應用程序加載正常,但其他20%的錯誤出現,例如“ jQuery不是函數”或“ $(...)。mmenu不是函數”。 這是我的文件。 有人可以找出我在做什么錯嗎?

<script type="text/javascript" src="js/jquery-lib.js"></script><!-- Jquery Library -->
    <script type="text/javascript" src="js/jquery-migrate-1.3.0.min.js"></script>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript" src='js/mapbox.js'></script>
    <script type="text/javascript" src='js/leaflet.markercluster.js'></script>
    <script type="text/javascript" src="js/build.min.js"></script>
    <script type="text/javascript" src="lib/chosen/chosen.jquery.js" ></script>
    <script type="text/javascript" src="js/jquery-ui.js"></script>
    <script type="text/javascript" src="lib/slick/slick.min.js"></script>
    <script type="text/javascript" src="lib/jquerym.menu/js/jquery.mmenu.min.all.js"></script>
    <script type="text/javascript" src="lib/Magnific-Popup-master/jquery.magnific-popup.min.js"></script>
    <script type="text/javascript" src="lib/jQuery.filer-master/js/jquery.filer.min.js"></script>
    <script type="text/javascript" src="js/bootstrap-rating.js"></script>
    <script type="text/javascript" src="lib/popup/js/classie.js"></script> <!-- Popup -->
    <script type="text/javascript" src="lib/popup/js/modalEffects.js"></script> <!-- Popup -->
    <script type="text/javascript" src="js/main.js"></script>

最后一個是main.js,所有內容均已初始化。 所以現在,在我的index.html中,我有這個:

    <script data-main="require-config" src="bower_components/requirejs/require.js"></script>

我的require-confing.js看起來像這樣

require.config({
paths: {
    jquery: 'js/jquery-lib',
    jquerymigrate: 'js/jquery-migrate-1.3.0.min',
    rating: 'js/bootstrap-rating',
    build: 'js/build.min',
    mapbox: 'js/mapbox',
    leaflet: 'js/leaflet.markercluster',
    chosen: 'lib/chosen/chosen.jquery',
    jqueryui: 'js/jquery-ui',
    slick: 'lib/slick/slick.min',
    jquerymenu: 'lib/jquerym.menu/js/jquery.mmenu.min.all',
    magnific: 'lib/Magnific-Popup-master/jquery.magnific-popup.min',
    fileLoader: 'lib/jQuery.filer-master/js/jquery.filer.min',
    main: 'js/main',
    angular: 'bower_components/angular/angular',
    angularRoute: 'bower_components/angular-route/angular-route',
    angularMocks: 'bower_components/angular-mocks/angular-mocks',
    angularTranslate: 'bower_components/angular-translate/angular-translate',
    angularTranslateLoadProvider: 'bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files',
    text: 'bower_components/requirejs-text/text'
},
shim: {
    'jquery': {
        'exports': 'jquery'
    },
    'jquerymigrate': {
        deps: ['jquery']
    },
    'build': {
        deps: ['jquery']
    },
    'mapbox': {
        deps: ['jquery']
    },
    'leaflet': {
        deps: ['jquery', 'jquerymigrate']
    },
    'chosen': {
        deps: ['jquery']
    },
    'jqueryui': {
        deps: ['jquery']
    },
    'slick': {
        deps: ['jquery', 'jqueryui']
    },
    'fileLoader': {
        deps: ['jquery']
    },
    'js/bootstrap-rating': {
        deps: ['jquery'],
        'exports': 'rating'
    },
    'jquerymenu': {
        deps: ['jquery'],
        'exports': 'jquerymenu'
    },
    'magnific': {
        deps: ['jquery']
    },
    'main': {
        deps: ['jquery', 'jqueryui', 'build', 'mapbox', 'chosen', 'fileLoader', 'rating', 'jquerymenu', 'slick', 'magnific']
    },
    'angular': { 'exports': 'angular' },
    'angularRoute': ['angular'],
    'angularTranslate': ['angular'],
    'angularTranslateLoadProvider': ['angularTranslate'],
    'angularMocks': {
        deps: ['angular'],
        'exports': 'angular.mock'
    }
}

最后我的app.js像這樣

    define([
    'angular',
    'angularRoute',
    'angularTranslate',
    'angularTranslateLoadProvider',
    'jquery',
    'build',
    'mapbox',
    'leaflet',
    'chosen',
    'jqueryui',
    'rating',
    'slick',
    'jquerymenu',
    'fileLoader',
    'main',
    'view1/view1',
    'view2/view2'
], function (angular, angularRoute, view1, view2, angularTranslate, angularTranslateLoadProvider) {
    // Declare app level module which depends on views, and components
    return angular.module('myApp', [
        'ngRoute',
        'pascalprecht.translate',
        'myApp.view1',
        'myApp.view2'
    ]).config(['$routeProvider', '$translateProvider', function ($routeProvider, $translateProvider) {
        $routeProvider.when('/menu', {
            resolve: {
                "prevent": function () {
                    window.location.href = window.lastPath;
                }
            }
        }).otherwise({ redirectTo: '/view1' });
        $translateProvider.useStaticFilesLoader({
            prefix: 'translations/',
            suffix: '.json'
        });
        $translateProvider.preferredLanguage('es');
    }]);
});

這是我的問題

您在define中的順序應與function中的參數匹配。

例如,

define(['module1', 'module2',......, 'moduleK'], function(module1, module2,...., moduleK){

});

回調中參數的順序應與您在define中將模塊作為依賴項的順序相匹配

因此,您的代碼應如下所示;

 define([
    'angular',
    'angularRoute',
    'angularTranslate',
    'angularTranslateLoadProvider',
    'jquery',
    'build',
    'mapbox',
    'leaflet',
    'chosen',
    'jqueryui',
    'rating',
    'slick',
    'jquerymenu',
    'fileLoader',
    'main',
    'view1/view1',
    'view2/view2'
], function (angular, angularRoute, angularTranslate, angularTranslateLoadProvider, $, build, mapbox, leaflet, chosen, jqueryui, rating, slick, jquerymenu, fileloader, main, view1, view2) {
.....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM