require('vue') 将路径变为了 "vue/src/main.js"处理
-
require.resolve处理路径的过程就是根据扩展名循环的去查找是否有已注册的,也就是在require.modules中获取,或者是在require.aliases中, 最终在require.aliases的vue/index.js模块中找到
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注册模块
-
通过module.call调用模块
其中require.relative方法是获取相关依赖模块名称
- 所以模块调用就是module.call(this, {}, localRequire, {exports:{}, component: true, client: true})
-
调用vue/src/main.js模块后由下图可以看到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;