使用requirejs shimConfig加载jQuery插件

时间:2014-06-16 08:28:01

标签: javascript jquery requirejs shim

此代码使用requirejs.shimConfig加载jQuery.mCustomScrollbar插件:

requirejs.config({
  baseUrl:'scripts',
  paths:{
    async:'lib/plugins/async',
    domReady:'lib/plugins/domReady',
    jquery:"http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min", 
    "jquery.mCustomScrollbar":"lib/plugins/jquery.mCustomScrollbar.concat.min"  
  },
  shim:{
        "jquery.mCustomScrollbar":{
           deps:['jquery'],
           exports:'jQuery.fn.mCustomScrollbar'
          }
       }
});

然而,Chrome控制台显示requirejs尝试从baseUrl加载文件:

 GET http://localhost:8180/GoogleMapErpProject/scripts/jQuery.mCustomScrollbar.js 404   (Not Found) require.js:34
 Uncaught Error: Script error for: jQuery.mCustomScrollbar
 http://requirejs.org/docs/errors.html#scripterror 

编辑:

我找到了一个令人不满意的解决方案:

  requirejs.config({
baseUrl:'scripts',
paths:{
    async:'lib/plugins/async',
    domReady:'lib/plugins/domReady',
    jquery:"http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min",
    plugins:"lib/plugins"   
},
shim:{
    "jquery":{
        exports:"jQuery"
    },
    "plugins/jquery.mCustomScrollbar.concat.min":{
        deps:['jquery'],
        exports:'jQuery.fn.mCustomScrollbar'
    }
   }
});

为什么当我在paths中指定路径并在shimConfig中使用该路径时,它不起作用?

1 个答案:

答案 0 :(得分:0)

来自require.js文档,

  

baseUrl :用于所有模块查找的根路径。所以在上面   例如,“my / module”的脚本标签将有一个   SRC = “/另一/路径/我/ module.js”。加载时不使用baseUrl   普通的.js文件(由以。开头的依赖字符串表示   斜杠,有一个协议,或以.js结尾),这些字符串按原样使用,   所以a.js和b.js将从与HTML相同的目录中加载   包含上述代码段的页面。

因此路径应该/可以是这样的:

paths:{
    async:'lib/plugins/async',
    domReady:'lib/plugins/domReady',
    jquery:"http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min", 
    "jquery.mCustomScrollbar":"/lib/plugins/jquery.mCustomScrollbar.concat.min"  
  },

paths:{
    ...
    "jquery.mCustomScrollbar":"./lib/plugins/jquery.mCustomScrollbar.concat.min"  
  },

paths:{
    ... 
    "jquery.mCustomScrollbar":"lib/plugins/jquery.mCustomScrollbar.concat.min.js"  
  },

如果您不希望它从baseUrl加载。