Angular 8 Server Rendering не работает с Firebase - PullRequest
0 голосов
/ 03 ноября 2019

Я создаю проект Angular 8 с Angular Universal, чтобы сделать мой проект более дружественным к SEO. Мой фактический блокировщик - это когда я хочу запустить npm run server:ssr и выдать ошибку, связанную с @firebase/app package.

Я запускаю проект на компьютере с Windows 10 Angular 8 и Firebase ^ 6.2.0

angular.json file:

          "builder": "@angular-devkit/build-angular:server",
          "options": {
            "outputPath": "dist/server",
            "main": "src/main.server.ts",
            "tsConfig": "src/tsconfig.server.json"
          },

Это сообщение, которое я получаю:

@firebase/app:
      Warning: This is a browser-targeted Firebase bundle but it appears it is being
      run in a Node environment.  If running in a Node environment, make sure you
      are using the bundle specified by the "main" field in package.json.

      If you are using Webpack, you can specify "main" as the first item in
      "resolve.mainFields":
      https://webpack.js.org/configuration/resolve/#resolvemainfields

      If using Rollup, use the rollup-plugin-node-resolve plugin and specify "main"
      as the first item in "mainFields", e.g. ['main', 'module'].
      https://github.com/rollup/rollup-plugin-node-resolve


Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Я исправляю эту проблему, устанавливая эти два пакета:

npm i xmlhttprequest ws -s
npm i bufferutil utf-8-validate -s

и добавляя его в начало моего server.ts файла:

(global as any).WebSocket = require('ws');
(global as any).XMLHttpRequest = require('xhr2');

Спасибо за вашу помощь.

0 голосов
/ 03 ноября 2019

Пакет Firebase, который вы используете, предназначен только для браузера / клиента. Код, который вас беспокоит, находится на стороне сервера.

Вам необходимо импортировать (и настроить) firebase-admin , чтобы это работало на стороне сервера (NodeJS).

Если вы используете тот же код дляи клиент, и сервер, не забудьте разделить код на стороне клиента с флагом, например:

if( process.env.NODE_ENV === 'development') { 
    // client-side only code ... 
}

Дайте мне знать, если вам нужна дополнительная помощь!

...