在 Vue3 上配置推送器
Configuring Pusher on Vue3
我在 Vue3 中有一个项目,想实现实时 API 或网络套接字。所以我尝试使用 Vue 第三方库来使用 pusher,它们是 pusher-vue 和 vue-pusher。使用 pusher-vue 我收到错误:Uncaught TypeError: e.prototype is undefined。使用 vue-pusher 我收到错误:Uncaught TypeError: Vue.prototype is undefined。以下是图书馆的配置:
PUSHER VUE
Component.vue
export default{
channels: {
applications_channel: {
subscribeOnMount: true,
subscribed(){
console.log("Some text")
},
bind:{
add_application_event(data){
console.log(data)
}
}
}
}
}
main.js
createApp(App)
.use(PusherVue, {
app_key: "MY_KEY",
cluster: 'MY_CLUSTER',
debug: true,
debugLevel: "all"
})
.mount("#app")
VUE 推手
Component.vue
export default{
read(){
var channel = this.$pusher.subscribe('applications-channel')
channel.bind('add-application-event', ({ log }) => {
console.log(log);
})
}
}
main.js
createApp(App)
.use(require("vue-pusher"), {
api_key: "MY_KEY",
options: {
cluster: 'MY_CLUSTER',
ecrypted: true,
}
})
.mount("#app")
能否请您帮助我如何在 Vue3 上配置它或推荐任何初学者友好的替代方案以在 Vue3 上实现相同的功能。
pusher-vue
和 vue-pusher
都是为 Vue 2 构建的,因此您需要使用 Vue 3 migration build 让库在您的项目中工作。
要设置您的 Vue CLI 脚手架项目:
安装与您的 Vue 构建版本匹配的 Vue 兼容性构建和 SFC 编译器(即,安装 @vue/compat@^3.1.0
和 @vue/compiler-sfc@^3.1.0
如果 vue@^3.1.0
在 package.json
):
npm i -S @vue/compat@^3.1.0
npm i -S @vue/compiler-sfc@^3.1.0
配置 Webpack 以别名 vue
到 @vue/compat
构建,并将 vue-loader
的兼容模式设置为 Vue 2:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.resolve.alias.set('vue', '@vue/compat')
config.module
.rule('vue')
.use('vue-loader')
.tap(options => {
return {
...options,
compilerOptions: {
compatConfig: {
MODE: 2
}
}
}
})
}
}
demo: vue-pusher
in Vue 3 w/migration build
然而,vue-pusher
1.1.0 在 Vue 实例上似乎 only expose a new instance of Pusher (from pusher-js
) 为 this.$pusher
。该代码可以作为插件轻松迁移到 Vue 3:
// plugins/pusher.js
export default (app, { apiKey, ...options }) => {
const Pusher = require('pusher-js')
app.config.globalProperties.$pusher = new Pusher(apiKey, options)
}
// main.js
const { createApp } = require('vue')
import App from './App.vue'
import PusherPlugin from './plugins/pusher'
createApp(App)
.use(PusherPlugin, { apiKey: 'YOUR_API_KEY', cluster: 'YOUR_CLUSTER' })
.mount('#app')
我在 Vue3 中有一个项目,想实现实时 API 或网络套接字。所以我尝试使用 Vue 第三方库来使用 pusher,它们是 pusher-vue 和 vue-pusher。使用 pusher-vue 我收到错误:Uncaught TypeError: e.prototype is undefined。使用 vue-pusher 我收到错误:Uncaught TypeError: Vue.prototype is undefined。以下是图书馆的配置:
PUSHER VUE
Component.vue
export default{
channels: {
applications_channel: {
subscribeOnMount: true,
subscribed(){
console.log("Some text")
},
bind:{
add_application_event(data){
console.log(data)
}
}
}
}
}
main.js
createApp(App)
.use(PusherVue, {
app_key: "MY_KEY",
cluster: 'MY_CLUSTER',
debug: true,
debugLevel: "all"
})
.mount("#app")
VUE 推手
Component.vue
export default{
read(){
var channel = this.$pusher.subscribe('applications-channel')
channel.bind('add-application-event', ({ log }) => {
console.log(log);
})
}
}
main.js
createApp(App)
.use(require("vue-pusher"), {
api_key: "MY_KEY",
options: {
cluster: 'MY_CLUSTER',
ecrypted: true,
}
})
.mount("#app")
能否请您帮助我如何在 Vue3 上配置它或推荐任何初学者友好的替代方案以在 Vue3 上实现相同的功能。
pusher-vue
和 vue-pusher
都是为 Vue 2 构建的,因此您需要使用 Vue 3 migration build 让库在您的项目中工作。
要设置您的 Vue CLI 脚手架项目:
安装与您的 Vue 构建版本匹配的 Vue 兼容性构建和 SFC 编译器(即,安装
@vue/compat@^3.1.0
和@vue/compiler-sfc@^3.1.0
如果vue@^3.1.0
在package.json
):npm i -S @vue/compat@^3.1.0 npm i -S @vue/compiler-sfc@^3.1.0
配置 Webpack 以别名
vue
到@vue/compat
构建,并将vue-loader
的兼容模式设置为 Vue 2:// vue.config.js module.exports = { chainWebpack: config => { config.resolve.alias.set('vue', '@vue/compat') config.module .rule('vue') .use('vue-loader') .tap(options => { return { ...options, compilerOptions: { compatConfig: { MODE: 2 } } } }) } }
demo: vue-pusher
in Vue 3 w/migration build
然而,vue-pusher
1.1.0 在 Vue 实例上似乎 only expose a new instance of Pusher (from pusher-js
) 为 this.$pusher
。该代码可以作为插件轻松迁移到 Vue 3:
// plugins/pusher.js
export default (app, { apiKey, ...options }) => {
const Pusher = require('pusher-js')
app.config.globalProperties.$pusher = new Pusher(apiKey, options)
}
// main.js
const { createApp } = require('vue')
import App from './App.vue'
import PusherPlugin from './plugins/pusher'
createApp(App)
.use(PusherPlugin, { apiKey: 'YOUR_API_KEY', cluster: 'YOUR_CLUSTER' })
.mount('#app')