怎么在浏览器 webview环境 和node.js环境 webpack环境 都能用 + 小部分jq源码的解析

449 阅读1分钟
  <script>

    // 单例模式
    // let obj1={
    //     name:'1111'
    // }
    // let obj2={
    //     name:'2222'
    // }
    // (function(){
    //     let name ='xiaoming'
    // })();
    // (function(){
    //     let name ='xiaowang'
    // })();

    // 高级单例模式
    // let header = (function () {
    //     let obj = {
    //         name: 'lili'
    //     }
    //     function show() {
    //         console.log('show');
    //     }
    //     return {
    //         obj,
    //         show
    //     }
    // }());

    (function () {
        let obj = {
            name: 'lili'
        }
        function show() {
            console.log('show');
        }
       let header={
            obj,
            show
        }

        // window.header=header;//支持浏览器  不支持node

        // 浏览器 webview webpack 环境下能用
        if(typeof window !=="undefined"){
            window.header=header;
        }
        // node.js webpack 环境下下能用 
        if ( typeof module === "object" && typeof module.exports === "object" ) {
            module.exports=header;
        }
    }());

    let banner = (function () {
        header.show();//如果没有上文的header 就会报错
        let obj = {
            name: 'lili'
        }
        return {
            obj
        }
    }());

    let footer = (function () {
        header.show();
        let obj = {
            name: 'lili'
        }
        return {
            obj
        }
    }());
</script>




    (function (global, factory) {
    })(typeof window !== "undefined" ? window : this, function (window, noGlobal) {......}); 
     -----------------
    浏览器 webview webpack ---> window
    nodejs ---->global
    浏览器 webview ----> 不支持module.exports
    nodeks webpack ----> 支持module.exports

    let global = typeof window !== "undefined" ? window : this; //当前的this指的是global
    let factory = function factory() { };
    (function (global, factory) {
        "use strict";
        // 支不支持module化导出  module.exports ----> nodejs/webpack
        if (typeof module === "object" && typeof module.exports === "object") { //支不支持模块化  true 支持 false不支持
            module.exports = global.document ? //只有window,才有document-->true  
                factory(global, true) : //webpack factory(window,true)
                function (w) { //node环境
                    if (!w.document) {  //不支持nodejs
                        throw new Error("jQuery requires a window with a document");
                    }
                    return factory(w);
                };
        } else {
            //浏览器 Webview
            factory(global);//factory(window);   factory(global);
        }
    })(global, factory);

        module.exports = global.document ? factory( global, true ) : function( w ) {...};
	
	global.document= window.document--->true
	
	module.exports = factory( window, true )
	
	
	module.exports = global.document ? factory( global, true ) : function( w ) {...};
	
	global.document=global.documen--->false
	
	module.exports=function( w ) { w---->window
		if ( !w.document ) {
			throw new Error( "jQuery requires a window with a document" );
		}
		return factory( w );//  factory( window )
	}
	
	!w.document    window.document-->true   !true  false

     -------------------
    let factory=function factory(window, noGlobal){//noGlobal--->undefined 浏览器 webwiew /true  webpack
		
		if ( typeof noGlobal === "undefined" ) {//浏览器 webwiew
			window.jQuery = window.$ = jQuery;
		}
		
		return jQuery;
	}
	
	
	jQuery.ajax()
	$.ajax()