美文网首页
vue.js 0.1.0源码学习(二)—— 从require('

vue.js 0.1.0源码学习(二)—— 从require('

作者: Obeing | 来源:发表于2017-06-02 09:04 被阅读0次

    require('vue') 将路径变为了 "vue/src/main.js"处理

    Paste_Image.png
    • require.resolve处理路径的过程就是根据扩展名循环的去查找是否有已注册的,也就是在require.modules中获取,或者是在require.aliases中, 最终在require.aliases的vue/index.js模块中找到


      Paste_Image.png
    require.exts = [
        '',
        '.js',
        '.json',
        '/index.js',
        '/index.json'
     ];
    
    • vue/index.js模块是怎么注册的呢?

    • 在4765这一行 require.alias("vue/src/main.js", "vue/index.js");

    require.alias = function (from, to) {
            if (!require.modules.hasOwnProperty(from)) {
                throwError()
                return
            }
            require.aliases[to] = from;  // require.aliases["vue/index.js"] = "vue/src/main.js";
    
            function throwError() {
                throw new Error('Failed to alias "' + from + '", it does not exist');
            }
        };
    

    vue/src/main.js注册模块

    Paste_Image.png
    • 通过module.call调用模块


      Paste_Image.png
    • 其中require.relative方法是获取相关依赖模块名称

    require.relative
    • 所以模块调用就是module.call(this, {}, localRequire, {exports:{}, component: true, client: true})
    • 调用vue/src/main.js模块后由下图可以看到mod的变化,原本mod只是一个空对象


      mod的变化
    • 将mod.exports交回到module上,并返回module.exports
    •   module.call(this, mod.exports, require.relative(resolved), mod);
        delete module._resolving;
        module.exports = mod.exports;
        …………
       return module.exports;
      

    相关文章

      网友评论

          本文标题:vue.js 0.1.0源码学习(二)—— 从require('

          本文链接:https://www.haomeiwen.com/subject/lazefxtx.html