Vue 不是 defined/not 构造函数
Vue is not defined/not a constructor
你好所以我知道有几个问题已经相关,如果不是,完全相同但出于某种原因 none 这些答案对我有用,所以我想根据我的具体情况提出这个问题场景。
所以我已经使用 laravel-mix
和 vuejs
几个月了,只是为了给你一个背景,我对使用 webpack 或捆绑器还很陌生。我开始使用 laravel-mix
因为它是一个项目所必需的,从那时起我什至在单独的项目中也一直在使用它。现在我正在使用 laravel-mix
和 vuejs
的新版本,我似乎无法使 vuejs
工作!
先给大家看看我的webpack.mix.js
:
const mix = require("laravel-mix")
mix.js('src/javascript/app.js', 'assets').extract(['vue', 'vue-lazysizes', 'flickity', 'axios'])
.vue()
.sass('src/style/app.scss', 'assets')
.options({
postCss: [require('tailwindcss')]
})
这是我的 package.json
:
{
"name": "name",
"version": "1.0.0",
"description": "",
"main": "webpack.mix.js",
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@vue/compiler-sfc": "^3.0.11",
"autoprefixer": "^10.2.5",
"laravel-mix": "^6.0.13",
"lato-font": "^3.0.0",
"postcss": "^8.2.8",
"resolve-url-loader": "^3.1.2",
"sass": "^1.32.8",
"sass-loader": "^10.1.1",
"tailwindcss": "^2.0.3",
"vue-compiler": "^4.2.1",
"vue-loader": "^15.9.5",
"vue-template-compiler": "^2.6.12"
},
"dependencies": {
"axios": "^0.21.1",
"flickity": "^2.2.2",
"lazysizes": "^5.3.0",
"vue": "^3.0.11",
"vue-lazysizes": "^1.0.5"
}
}
这就是我的 app.js
的样子:
import Vue from "vue";
import axios from 'axios';
import Flickity from 'flickity';
import vueLazysizes from 'vue-lazysizes';
export default {
directives: {
lazysizes: vueLazysizes
}
}
// window.Vue = Vue;
window.Flickity = Flickity;
window.axios = axios;
require("./modules/_global")
require("./modules/_index")
这是我的第一个 Vue
对象:
let featured = new Vue({
el: '.featured--vue_js',
delimiters: ['${','}'],
data: {
loadingAnimation: true,
requestComplete: false
},
created(){
this.requestData()
},
methods: {
requestData(){
console.log(this)
}
}
})
现在问题来了,每次我取消注释 window.Vue = Vue;
以将 Vue
贴标为全局对象时,我都会收到 Uncaught TypeError: Vue is not a constructor
错误
现在我尝试删除它,它给了我 Uncaught ReferenceError: Vue is not defined
的错误
如果我尝试 window.Vue = require('vue');
它给了我 Uncaught TypeError: Vue is not a constructor
再次
如果我尝试在我的 Vue 对象之前声明 const Vue = require('vue');
它仍然给我 Uncaught TypeError: Vue is not a constructor
我整晚都在做这个,我不明白为什么它不起作用,所以我现在真的需要帮助,因为我要使用 Vue
和如果我不能让它发挥作用,那对我来说真的很糟糕。
非常感谢!请不要立即将此标记为重复,因为没有答案对我有用。谢谢那些愿意回答的人!
看起来你的初始化代码是为 Vue 2:
import Vue from 'vue'
let featured = new Vue({
el: '.featured--vue_js',
/*...*/
})
但是你的项目安装了 Vue 3,所以你应该使用 Vue 3 的 createApp()
:
import { createApp } from 'vue'
let featured = createApp({
/*...*/
}).mount('.featured--vue_js')
你好所以我知道有几个问题已经相关,如果不是,完全相同但出于某种原因 none 这些答案对我有用,所以我想根据我的具体情况提出这个问题场景。
所以我已经使用 laravel-mix
和 vuejs
几个月了,只是为了给你一个背景,我对使用 webpack 或捆绑器还很陌生。我开始使用 laravel-mix
因为它是一个项目所必需的,从那时起我什至在单独的项目中也一直在使用它。现在我正在使用 laravel-mix
和 vuejs
的新版本,我似乎无法使 vuejs
工作!
先给大家看看我的webpack.mix.js
:
const mix = require("laravel-mix")
mix.js('src/javascript/app.js', 'assets').extract(['vue', 'vue-lazysizes', 'flickity', 'axios'])
.vue()
.sass('src/style/app.scss', 'assets')
.options({
postCss: [require('tailwindcss')]
})
这是我的 package.json
:
{
"name": "name",
"version": "1.0.0",
"description": "",
"main": "webpack.mix.js",
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@vue/compiler-sfc": "^3.0.11",
"autoprefixer": "^10.2.5",
"laravel-mix": "^6.0.13",
"lato-font": "^3.0.0",
"postcss": "^8.2.8",
"resolve-url-loader": "^3.1.2",
"sass": "^1.32.8",
"sass-loader": "^10.1.1",
"tailwindcss": "^2.0.3",
"vue-compiler": "^4.2.1",
"vue-loader": "^15.9.5",
"vue-template-compiler": "^2.6.12"
},
"dependencies": {
"axios": "^0.21.1",
"flickity": "^2.2.2",
"lazysizes": "^5.3.0",
"vue": "^3.0.11",
"vue-lazysizes": "^1.0.5"
}
}
这就是我的 app.js
的样子:
import Vue from "vue";
import axios from 'axios';
import Flickity from 'flickity';
import vueLazysizes from 'vue-lazysizes';
export default {
directives: {
lazysizes: vueLazysizes
}
}
// window.Vue = Vue;
window.Flickity = Flickity;
window.axios = axios;
require("./modules/_global")
require("./modules/_index")
这是我的第一个 Vue
对象:
let featured = new Vue({
el: '.featured--vue_js',
delimiters: ['${','}'],
data: {
loadingAnimation: true,
requestComplete: false
},
created(){
this.requestData()
},
methods: {
requestData(){
console.log(this)
}
}
})
现在问题来了,每次我取消注释 window.Vue = Vue;
以将 Vue
贴标为全局对象时,我都会收到 Uncaught TypeError: Vue is not a constructor
现在我尝试删除它,它给了我 Uncaught ReferenceError: Vue is not defined
如果我尝试 window.Vue = require('vue');
它给了我 Uncaught TypeError: Vue is not a constructor
再次
如果我尝试在我的 Vue 对象之前声明 const Vue = require('vue');
它仍然给我 Uncaught TypeError: Vue is not a constructor
我整晚都在做这个,我不明白为什么它不起作用,所以我现在真的需要帮助,因为我要使用 Vue
和如果我不能让它发挥作用,那对我来说真的很糟糕。
非常感谢!请不要立即将此标记为重复,因为没有答案对我有用。谢谢那些愿意回答的人!
看起来你的初始化代码是为 Vue 2:
import Vue from 'vue'
let featured = new Vue({
el: '.featured--vue_js',
/*...*/
})
但是你的项目安装了 Vue 3,所以你应该使用 Vue 3 的 createApp()
:
import { createApp } from 'vue'
let featured = createApp({
/*...*/
}).mount('.featured--vue_js')