R.js不能正确编译模糊脚本

r.js not compiling shimmed scripts properly

本文关键字:编译 模糊 脚本 js 不能      更新时间:2023-09-26

我能够成功地通过Grunt的需求任务编译我的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: {
    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时,对任何加载脚本的访问都是未定义的。

不确定您所说的"对我的任何闪烁脚本的访问是未定义的"是什么意思。您需要确保以正确的顺序包含隐藏脚本。此外,您可以尝试为该脚本定义假模块。在你构建JS的配置中添加:

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

你需要理解,导出是做什么的。加载脚本后,它将在全局命名空间中查找该变量。我不认为有"jqueryui"命名空间。所以它总是未定义的,因为它必须在jQuery之后加载,它只是扩展了jQuery,所以模块不能返回任何有用的东西。