(Webpack 构建失败?)不同级别的 Vue 组件中的 Firebase DB

Posted

技术标签:

【中文标题】(Webpack 构建失败?)不同级别的 Vue 组件中的 Firebase DB【英文标题】:(Webpack failing to build?) Firebase DB in different levels of Vue components 【发布时间】:2017-08-27 09:43:37 【问题描述】:

我正在尝试使用单个文件 Vue 组件设置一个 vue-fire 应用程序。 我正在使用官方网站上提供的标准(完整)Vue-cli Webpack 模板。

我在App.vue 中加载了firebase,如下所示:

 let config = 
     ...
 ;
 let app = Firebase.initializeApp(config);
 let db = app.database();
 let usersRef = db.ref('users');

...

export default 
     name: 'app',
     data () 
         return 
             login: 
                 email: '',
                 password: ''
             ,
             newUser: 
                 email: '',
                 password: ''
             ,
             showRegister: false
         
     ,
     firebase: 
               users: usersRef,
     ,
     ...

我正在使用 Vue-router,我的路由设置如下:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import News from '@/components/News'

Vue.use(Router)

export default new Router(
  routes: [
      
          path: '/',
          name: 'Home',
          component: Home
      ,
      
          path: '/news',
          name: 'News',
          component: News

      
  ]
)

我希望能够在“新闻”组件中访问我的 Firebase 应用。问题是,如果我在 News.vue 文件中包含整个 Firbase 设置,我会收到错误消息:

[DEFAULT]: Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app).

recommended solution是在App.vue中导出初始化app的数据库,在子组件中导入。所以我将它添加到我的App.vue 脚​​本的底部:

 module.exports.FBApp = app.database();

这个给News.vue:

 import FBApp from '../App.vue'
 let usersRef = FBApp.ref('users')

但现在我收到以下错误:

TypeError: __WEBPACK_IMPORTED_MODULE_0__App_vue___default.a.ref is not a function

有人知道怎么做吗?当然不会太难。

【问题讨论】:

你在用 vuefire 吗? @Ffloriel 是的,我是 @DavidJ。解决了吗? 【参考方案1】:

在 app.vue 旁边创建一个如下所示的 db.js 文件。

import firebase from 'firebase'

var config = 
  apiKey: 'xxxxx'
  authDomain: 'xxxxx'
  databaseURL: 'xxxxx'
  projectId: 'xxxxx'
  storageBucket: 'xxxxx'
  messagingSenderId: 'xxxxx'

const firebaseApp = firebase.initializeApp(config)

const db = firebaseApp.database()

export default db

在你的 main.js 中:

import Vue from 'vue'
import App from './App'
import router from './router'
import VueFire from 'vuefire'

// explicit installation required in module environments
Vue.use(VueFire)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue(
  el: '#app',
  router,
  template: '<App/>',
  components:  App 
)

现在在任何组件中,例如:

<template>
  <span>
     news 
  </span>  
</template>
<script>
import db from '../db'
export default 
  data: function () 
    return 
      users: [],
      sample: []
    
  ,
  firebase: function () 
    return 
      news: db.ref('news')
    
  

</script>

【讨论】:

我正在尝试让它工作,但是当我运行 npm run build 时出现一个奇怪的错误:ERROR in ./~/vue-fire/mixin.js Module not found: Error: Can't resolve './lib/fire' in '/home/david/projects/challenge/node_modules/vue-fire' @ ./~/vue-fire/mixin.js 7:11-32 @ ./~/vue-fire/index.js @ ./src/main.js Build complete. 你安装了firebase。你也可以发布你的 package.json 另外请发布您的 app.vue 和 main.js 你的代码很好,我只是愚蠢地用 vue-fire 替换了 vuefire。感谢您的帮助,得 50 分!

以上是关于(Webpack 构建失败?)不同级别的 Vue 组件中的 Firebase DB的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 webpack 在 eslint 错误上构建失败?

升级到 Vue 3 并将 Vue 实例化更新为 createApp 后,webpack 构建失败并出现 Module not found: Error: Can't resolve 'vue'

webpack构建vue项目(再谈配置)

VSCode 显示与 Vue CLI 构建不同的错误

webpack 导入 App.vue 或其他组件 vue 失败

vue+webpack2实现路由的懒加载