Sea.js出现Uncaught TypeError: object is not a function

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyang111222/article/details/51131690

今天在整合Sea.js和jquery出现了Uncaught TypeError: object is not a function,一下就懵逼了!

可能的原因:

百度一下网上说大概可以归为两个主要原因:
1、引用的第三方类库的路径不对。
2、没有将第三方非CMD规范的类库定义成CMD的模块

解决过程:

我使用的是jquery-1.12.3.js,其代码中有如下的一段:

if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function() {
        return jQuery;
    } );
}

根据 ID 和路径匹配原则,我将文件的目录设置如下(具体原因参考http://blog.csdn.net/iamduoluo/article/details/46457685):

这里写图片描述

其配置文件如下:

/**
 * Set configuration
 */
seajs.config({

    //shim plugins
    plugins: ['shim'],

    base: "./js/",   /*"./"表示当前路径*/
    alias: {
      "jquery": "jquery/jquery-1.12.3.js"
    },
    preload: ["jquery"],

 });

seajs.use("./js/index/main");

运行项目,就出现Uncaught TypeError: object is not a function,仔细一看加载的文件发现jquery文件可以加载的:

这里写图片描述

在控制台中输入:

seajs.resolve('jquery')

‘jquery’为配置中alias里面写的别名,敲回车之后你会发现控制台会输出jQuery的路径,访问该路径发现代码确实已经加载。

这里写图片描述

也就说上面说的第一种情况排除!

再仔细思考一下第二条,发现jquery遵循是AMD规范,不遵守CMD规范,而seajs是CMD规范的。好的,问题应该在这里,把jquery-1.12.3.js修改为符合CMD规范即可,jquery-1.12.3.js中有一段代码:

if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function() {
        return jQuery;
    } );
}

修改为:

if ( typeof define === "function") {
    define( "jquery", [], function() {
        return jQuery;
    } );
}

关于AMD规范参考:https://github.com/amdjs/amdjs-api/wiki/AMD

seajs模块定义规范参考:https://github.com/seajs/seajs/issues/242

猜你喜欢

转载自blog.csdn.net/ouyang111222/article/details/51131690
今日推荐