vue-cli v3 с функциями firebase для node.js, хостинг для firebase (ошибка: в каталоге с исходными файлами функций не найден пакет npm) - PullRequest
0 голосов
/ 24 августа 2018

Я бы хотел использовать Vue.js для функций внешнего интерфейса и Firebase (Express.js) + Firestore на Backend.

0 шаг: я создал новый проект в Google Firebase, я создал новую учетную запись службы с разрешениями владельца (для использования позже с Admin SDK)

1-й шаг: я установил vue-cli v3 и создал проект:

$ vue create my-project
$ npm run serve //localhost:8080 OK

2-й шаг:

$npm install firebase firebase-admin firebase-functions --save

Структура папок:

my-project
  .firebaserc //created (edited) manually
  babel.config.js
  firebase.json //created (edited) manually
  package.json
  dist
  node_modules
  public
  src
    assets
    components
    firebase
      functions
        index.js //here are my functions
      service-accounts
    views

firebase.json: (скопировано из другого проекта и отредактировано вручную)

{
  "functions:": {
    "source": "src/firebase/functions"
  },
  "hosting": {
    "public": "public",
    "ignore": [...]
  }
}

SRC / функции / index.js:

import functions from 'firebase-functions';
import admin from 'firebase-admin';

const serviceAccount = require('../service-accounts/owner-key.json');
admin.initializeApp({
  credentials: admin.credencial.cert(serviceAccount),
  databaseURL: 'my-project.firebaseio.com'
})
const db = admin.firestore();
...

В файл package.json я добавил дополнительные скрипты:

"deploy": "vue-cli-service build && firebase deploy --only hosting,functions"

но когда я запускаю команду " npm run deploy ", я получаю сообщение об ошибке:

Пакет npm не найден в каталоге исходных функций. Пожалуйста, запустите 'npm init' внутри src / firebase / functions

У меня следующий вопрос: почему он должен устанавливать пакеты функций firebase только внутри директории с исходными функциями, и я могу использовать firebase-функции, которые я установил в папке node_modules верхнего уровня?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Я нашел объяснение такой ошибке: Github: firebase.json, опция "functions.source" ...

firebase-tools смотрит только на папку функцийпри выполнении функций эмуляции или развертывания.Это преднамеренный выбор дизайна, чтобы иметь изоляцию между целями развертывания (функциями, хостингом и т. Д.). При развертывании функций вся папка функций архивируется (без учета узловых модулей) и развертывается.После развертывания сервер «строит» проект, просматривая содержимое пакета package.json и извлекая зависимости из npm.Корень проекта не развернут.Поэтому эмулятор имитирует поведение развертывания, просматривая только папку функций.

firebase.json в корневой папке проекта:

{
  "functions:": {
    "source": "src/functions"
  },
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

И вВ основной пакет package.json в корневой папке проекта я добавил одну строку:

"scripts": {
  "postinstall": "cd src/functions && npm install"
},

После того, как все я перешел в папку / src / functions и установил Express.js:

cd src/functions && npm install express --save
0 голосов
/ 24 августа 2018

Я бы предложил разделить два проекта и, в частности, не помещать каталог облачных функций Firebase в папки проекта vue.js.

Другими словами:

1 / Создайте свой проект vue.js как автономный интерфейсный проект vue.js, используя CLI

vue.js

2 / Создайте свой проект Firebase как обычно через интерфейс командной строки Firebase в совершенно другом месте.

3 / Если вы хотите развернуть ваше интерфейсное приложение vue.js, создайте ваше приложение vue.js и скопируйте содержимое папки dist в общую папку проекта Firebase

4 / Разверните проект Firebase с помощью firebase deploy --only hosting,functions (или firebase deploy --only functions или firebase deploy --only hosting ...)

Вы можете автоматизировать копирование в шаге 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...