一个奇怪的 bug(Vue 项目与插件获取了不一样的 Vue 构建版本)

2017-12-04 10:42:34 +08:00
 wxsm

(虽然我是在自己的项目中第一次发现这个问题,但是后来测试了 element-ui 与 iview 其实都存在相同的情况,所以这不是我自己的 lib 的问题)

我有一个使用 webpack 导出的 lib 项目:

// webpack config
{
  ...
  externals: {
    vue: {
      root: 'Vue',
      commonjs: 'vue',
      commonjs2: 'vue',
      amd: 'vue'
    }
  },
  output: {
    ...
    libraryTarget: 'umd'
  },
  ...
}

然后我想要在 Vue.js 的官方 browserify template 项目中使用它:

// main.js
import Vue from 'vue'
import * as mylib from 'mylib'

Vue.use(mylib)

然后问题就来了。项目本体使用的是 vue.common.js 构建,而 lib 却使用了 vue.runtime.common.js 构建。

更甚者,无论我怎么更改项目本体的构建依赖,插件将始终使用 vue.runtime.common.js 构建。

如果我同时在项目本体中与 lib 中执行 console.log(Vue.version, typeof Vue.compile),将得到如下的结果:

可以看到控制台中同时出现了 vue.common.jsvue.runtime.common.js 的输出,项目本体中 typeof Vue.compilefunction, 但是在 lib 中为 undefined.

为什么会这样?我要如何保证 lib 能够跟项目本体获取到一样的 Vue 构建?

2068 次点击
所在节点    Vue.js
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX