0

Grunt の requirejs タスクを介して JS モジュールを正常にコンパイルできますが、shim スクリプトで未定義になります。ここに私の設定があります

requirejs.config({
    "baseUrl": "../../../components/",
    "paths": {
        "less": "less.js/dist/less-1.3.3",
        "datepicker": "jquery-ui/ui/jquery.ui.datepicker",
        "jquery": "jquery/jquery",
        "jqueryui": "jquery-ui/ui/jquery-ui",
        "spectrum": "spectrum/spectrum",
        "class": "class/class",
        "underscore": "underscore-amd/underscore",
        "d3": "d3/d3",
        "nv": "nvd3/nv.d3",
        "dataTables": "datatables/dataTables"

    },
    shim: {
        less: {
            exports: "less"
        },
        jqueryui: {
            exports: "jqueryui"
        },
        spectrum: {
            exports: "spectrum"
        },
        class:{
            deps: [ 'jquery'],
            exports: "class"
        }
    }   
})

これが私の Gruntfile からの私の requirejs 設定です:

requirejs: {
    dist: {
        options: {
            mainConfigFile: 'src/scripts/main.js',
            out: '<%= yeoman.dist %>/scripts/main.js',
            paths:{
                "main" : "../final/src/scripts/main"
            },
            include:['main'],
            preserveLicenseComments: false,
            useStrict: true,
            wrap: true
        }
    }
}

実行するgrunt requirejs:distと、問題なくコンパイルされ、shimmed ファイルが含まれます。しかし、コンパイルされた JS を実行しようとすると、shim されたスクリプトへのアクセスが未定義になります。

4

1 に答える 1

0

「shimmed スクリプトへのアクセスが定義されていません」という意味がわかりません。shimmed スクリプトが正しい順序で含まれていることを確認する必要があります。また、そのスクリプトの偽のモジュールを定義してみてください。JS 構成をビルドする際に、以下を追加します。

onBuildRead: function (moduleName, path, contents) {
    if (moduleNam === 'spectrum'){
        contents += '; define(' + moduleName + ', function(){ return window.spectrum; });';
    }
    return contents;
}

エクスポートが何をするのかを理解する必要があります。スクリプトがロードされると、グローバル名前空間でその変数が検索されます。「jqueryui」名前空間はないと思います。jQueryの後にロードする必要があり、jQueryを拡張するだけなので、モジュールは有用なものを返すことができないため、常に未定義になります。

それが役立つことを願っています。

于 2013-05-24T04:15:35.287 に答える