一直苦恼了很久的一个问题就是:

  1. 在mpvue源码中的runtime/lifecycle.js中,原先的createMP函数是在initMP函数里面的,而现在的master分支上确实被抽离出来,但问题是找不到引用createMP的地方了???
  2. 打包后的代码的改变:
// 最新的master上,运行npm run build:mpvue,后packages/mpvue/index.js
var entryRuntime = {
  Vue: Vue$2,
  createMP: createMP
};
return entryRuntime;

// 在使用[mpvue-quickstart](https://github.com/mpvue/mpvue-quickstart)创建的项目中node_modules中的mpvue/index.js是:
return Vue$3;

可以看到打包后的代码,在最新的master上是多了一个entryRuntime的包裹,而实际使用mpvue的时候,直接是把Vue返回的。

搜索一波

自己找不到答案,就只能搜索一波了,找到了很好的一篇解析文章:mpvue源码分析(一) - data初始化时发生了什么,其中的作者利用npm link,配合mpvue-loader和mp-vue,直接搭起了本地源码调试环境。。tql

于是自己照着这样来,成功复现了,但是无语的又来了,当自己跑npm run watch:build进行本地构建后会发现,mpvue-demo直接就跑不起来了...,然后在main.js里面进行打印:

// main.js
import Vue from 'vue'
import App from './App'

console.log('Vue<<<:', Vue);
console.log('Vue.Vue<<<:', Vue.Vue);

结果会是:

这就比较尴尬了...,那么原作者是怎么看到createMP运行的呢?还是没有解决这个问题啊

万事不决,先看看版本?

查看自己的mpvue-demo的package-lock.json可以发现,mpvue是2.0.6版本,然后github库中有关packages的最新提交信息:

显示的也是2.0.6这个提交,但是lifecycle.js这个文件的提交记录显示,createMP函数的抽离,是在一个叫lifecycle refacter的pr里面,注意一下这个pr的时间2019.6.13号被合入到master,而最早的提交:modify mpvue lifecycle是在2.0.6版本之后!,下图为master上的提交记录:

对于mpvue,大家知道的是,已经停止更新了,那么是不是2.0.6版本之后就没有更新了呢?也就是说对于我们项目中使用的mpvue来说的话,其实只是对应着npm publish: 2.0.6这个提交。

可以去npm仓库里面看一下:

最新的beta版本是不会被下载的,同时加上下载量来看,2.0.6就是最新版了,那么猜想正确,之后的提交在master上面其实是一个待测试、发布的代码,被坑了...

标签: mpvue

添加新评论