首页 > 一段js代码看不懂

一段js代码看不懂

if( typeof define === "function" && define.amd ){
        define(factory);
    }
    else if( typeof module != "undefined" && typeof module.exports != "undefined" ){
        module.exports = factory();
    }
    else {
        window["Sortable"] = factory();
    }
    
    是什么意思?

if(typeof define === "function" && define.amd) {

// 判断是不是作为requirejs模块加入,如果是定义一个requriejs amd模块
// 其它amd模块可以使用require('***')来使用
define(factory);

} else if (typeof module != "undefined" && typeof module.exports != "undefined") {

// 判断是不是作为node模块加入,如果是则定义一个node模块
// 其它node模块可以使用require('***')来使用
module.exports = factory();

} else {

// 如果上面都不是,就把库挂到浏览器的window下使用
window["Sortable"] = factory();

}


这应该是那个js函数中的代码片段,其中已经声明了define,module,factory变量

if( typeof define === "function" && define.amd ){//在define是函数且拥有amd属性的情况下
        define(factory);//执行define函数,factory为参数
    }
    else if( typeof module != "undefined" && typeof module.exports != "undefined" ){//排除上面的条件,在module不为undefined(未定义)且module的exports属性不为undefined(未定义)的情况下
        module.exports = factory();//设置module的exports属性为factory函数的执行结果
    }
    else {//排除以上条件
        window["Sortable"] = factory();//设置window的Sortable属性为factory函数的执行结果
    }

这是一段典型的umd格式代码。

目标很简单,就是希望这个库能够成功的运行在AMD, CommonJS以及普通的<script>标签加载的环境里。

if( typeof define === "function" && define.amd ){
    //如果使用者的环境是`requirejs`加载器,那把该库的具体实现通过`define`关键字声明
    define(factory);
}
else if( typeof module != "undefined" && typeof module.exports != "undefined" ){
    //如果使用者的环境是nodejs,或者webpack,browserify等加载器,那通过commonjs的模块方式暴露
    module.exports = factory();
}
else {
    //最后如果使用者就是直接在html里通过<script src="xxx">的方式引入该库,那把该库的内容直接挂在window对象上
    window["Sortable"] = factory();
}
【热门文章】
【热门文章】