vue-demi icon indicating copy to clipboard operation
vue-demi copied to clipboard

Object() is not a function

Open shenjiuer opened this issue 3 years ago • 10 comments

当配置项目 webpack 的 externals 选项,将 vue 排除在 vendor 之外时, postinstall 执行会导致获取 vue 的版本出错,从而导致页面出现Object() is not a function 的问题 image

shenjiuer avatar Feb 18 '22 17:02 shenjiuer

因为require加载之前vue可能还未加载,导致require('vue')错误或获取到错误的vue版本。你可以使用vue-demi-fix修复

KesionX avatar Feb 20 '22 13:02 KesionX

因为require加载之前vue可能还未加载,导致require('vue')错误或获取到错误的vue版本。你可以使用vue-demi-fix修复

感谢

shenjiuer avatar Feb 22 '22 06:02 shenjiuer

你好, 我也碰到了这个问题, 引入vue3使用没啥问题, 引入vue2就报错了. image image 编译的时候, 说找不到 vue.

我的vite.config.ts

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import Unocss from "unocss/vite";

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    lib: {
      entry: "./src/index.ts",
      name: "ApeBricks",
      fileName: (format) => `ape-bricks.${format}.js`,
    },
    rollupOptions: {
      external: ["vue", "lodash-es"],
      output: {
        globals: {
          vue: "Vue",
        },
      },
    },
  },
  optimizeDeps: {
    exclude: ["vue-demi"],
  },
  plugins: [vue()],
});

在vue2中 执行 npx vue-demi-fix 也没用.

luo10 avatar Mar 11 '22 08:03 luo10

你好,我啥也报道了vue,引入了这个问题,引入vue2就错了。 的时候,找不到vue。 图片 图片

我的vite.config.ts

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import Unocss from "unocss/vite";

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    lib: {
      entry: "./src/index.ts",
      name: "ApeBricks",
      fileName: (format) => `ape-bricks.${format}.js`,
    },
    rollupOptions: {
      external: ["vue", "lodash-es"],
      output: {
        globals: {
          vue: "Vue",
        },
      },
    },
  },
  optimizeDeps: {
    exclude: ["vue-demi"],
  },
  plugins: [vue()],
});

在 vue2 中执行 npx vue-demi-fix 没有用。

hello,你可能可以尝试npx vue-demi-switch 2,如果还是不行的话,应该是软链接的问题,bin下的命令对应的vue-demi可能是另外一个包的,你得看下是否存在其他npm包引用了vue-demi

KesionX avatar Mar 11 '22 09:03 KesionX

hello,你可能可以尝试npx vue-demi-switch 2,如果还是不行的话,应该是软链接的问题,bin下的命令对应的vue-demi可能是另外一个包的,你得看下是否存在其他npm包引用了vue-demi

@KesionX hello, 我觉得可能是打包的问题? https://github.com/luo10/vue-demi-test 我传了个简单的例子, vue3-components打包完, 在vue2-use中使用yalc引入, 就会出现vue找不到的问题, 但是在vue3-use中就不会出现.... 能帮忙看看吗? 十分感谢.

luo10 avatar Mar 12 '22 17:03 luo10

hello,你可能可以尝试npx vue-demi-switch 2,如果还是不行的话,应该是软链接的问题,bin下的命令对应的vue-demi可能是另外一个包的,你得看下是否存在其他npm包引用了vue-demi

@KesionX hello, 我觉得可能是打包的问题? https://github.com/luo10/vue-demi-test 我传了个简单的例子, vue3-components打包完, 在vue2-use中使用yalc引入, 就会出现vue找不到的问题, 但是在vue3-use中就不会出现.... 能帮忙看看吗? 十分感谢.

hello 我看了demo,因为你在 vue3-components 中devDependencies使用了"vue": "^3.2.25",vue3-components打包出来的已经是vue3的了,自然在vue2-use无法使用。

KesionX avatar Mar 12 '22 18:03 KesionX

@KesionX 我查看了 vue-demi-switch 2 和 vue-demi-switch 3 不同状态打包出来的文件, 发现解析sfc模式的函数, vue2, vue3是不能兼容的... image 这些函数, 也不是 @vue/composition-api 能解决的... 要兼容的话得用h() 或者 jsx 去写模板文件..

luo10 avatar Mar 13 '22 17:03 luo10

same question, createElementBlock and some other apis is declared in vue3. It's not exists in @vue/composition-api

ChangerHe avatar Mar 22 '22 02:03 ChangerHe

vue2 not running . Object() is not function ,vue2 not has cearetApp()

我是使用的是vue2版本, 可是vue-demi鉴定出来我的版本 是vue3 isVue2=false,isVue3=true, 这是错误的,我的版本是vue2

alamhubb avatar Apr 08 '22 08:04 alamhubb

@KesionX 我查看了 vue-demi-switch 2 和 vue-demi-switch 3 不同状态打包出来的文件, 发现解析sfc模式的函数, vue2, vue3是不能兼容的... image 这些函数, 也不是 @vue/composition-api 能解决的... 要兼容的话得用h() 或者 jsx 去写模板文件..

我最近也遇到了类似的问题,想必你也是尝试直接编译单文件组件(sfc),因为编译过程中涉及到了 sfc-compiler ,但 vue2 和 vue3 的编译器不一样,所以没办法让编译的产物同时在 vue2/3 中运行。

我的解决方式是编译两份,然后模仿 vue-demi 在安装时检测 vue 的版本来决定使用哪一份。

可以看看这个项目模板的 postinstall 。

KaygNas avatar Jun 20 '22 15:06 KaygNas

Vue3 lib not working in Vue2 projects #152

我也遇到这样的问题。。。感觉是template的编译问题 如果这个很关键的痛点解决不了 那这个工具的意义何在啊

xixiaocheng avatar Aug 21 '22 15:08 xixiaocheng

let's track #152

sxzz avatar Sep 04 '22 15:09 sxzz