找不到模块';firebase/app';在部署Angular Universal应用程序时

找不到模块';firebase/app';在部署Angular Universal应用程序时,firebase,angularfire2,angularfire,angular-universal,Firebase,Angularfire2,Angularfire,Angular Universal,我处理这个问题已经快两个星期了。我尝试了很多变通办法,但似乎都不管用。我已将angular fire和firebase安装到其最新版本,尝试ng add@angular/fire,配置自定义webpack.config.ts,尝试回滚到每个建议的早期版本。没有人解决了这个问题 实际误差: de-10@de10-LIFEBOOK-A555:~/Desktop$node dist/server.js 内部/modules/cjs/loader.js:797 犯错误; ^ 错误:找不到模块“fireb

我处理这个问题已经快两个星期了。我尝试了很多变通办法,但似乎都不管用。我已将
angular fire
firebase
安装到其最新版本,尝试
ng add@angular/fire
,配置自定义
webpack.config.ts
,尝试回滚到每个建议的早期版本。没有人解决了这个问题

实际误差:

de-10@de10-LIFEBOOK-A555:~/Desktop$node dist/server.js
内部/modules/cjs/loader.js:797
犯错误;
^
错误:找不到模块“firebase/app”
需要堆栈:
-/home/de-10/Desktop/dist/server.js
在Function.Module.\u解析文件名(internal/modules/cjs/loader.js:794:15)
at Function.Module._load(内部/modules/cjs/loader.js:687:27)
at Module.require(内部/modules/cjs/loader.js:849:19)
根据需要(internal/modules/cjs/helpers.js:74:18)
反对。(/home/de-10/Desktop/dist/server.js:125276:18)
在需要的网页上(/home/de-10/Desktop/dist/server.js:20:30)
在模块上。(/home/de-10/Desktop/dist/server.js:125199:70)
在需要的网页上(/home/de-10/Desktop/dist/server.js:20:30)
在模块上。(/home/de-10/Desktop/dist/server.js:124984:78)
在需要的网页上(/home/de-10/Desktop/dist/server.js:20:30){
代码:“未找到模块”,
requireStack:['/home/de-10/Desktop/dist/server.js']
}
我不能放弃Firebase,因为我要面对:

../node_modules/@angular/fire/auth/auth.d.ts:4:28中出现错误-错误TS2307:找不到模块“firebase/app”。 4从“firebase/app”导入{User,auth}; ~~~~~~~~~~~~~~ ../node_modules/@angular/fire/firebase.app.module.d.ts:2:74-错误TS2307:找不到模块“firebase/app”。 2从“firebase/app”导入{auth、数据库、消息、存储、firestore、函数}; ~~~~~~~~~~~~~~ ../node_modules/@angular/fire/firestore/collection group/collection group.d.ts:2:27-错误TS2307:找不到模块“firebase/app”。 ~~~~~~~~~~~~~ . . . app/services/notification.service.ts:29:38-错误TS2339:类型“QueryDocumentSnapshot”上不存在属性“id”。 29 id:snap.payload.doc.id, ~~ app/services/notification.service.ts:68:35-错误TS2339:类型“DocumentChange”上不存在属性“type”。 68返回卡扣.payload.type ~~~~ . . . package.json

{
  "name": "universal-ssr",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "npm run build:ssr",
    "staging": "npm run build:ssr-staging && npm run serve:ssr",
    "production": "npm run build:ssr && npm run serve:ssr",
    "prod": "npm run build:ssr-production && npm run serve:ssr",
    "build": "ng build --prod",
    "test": "ng test",
    "dev-start": "ng serve",
    "ng serve": "ng serve --aot",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
    "build:ssr-staging": "npm run build:client-and-server-bundles-staging && npm run webpack:server",
    "build:ssr-production": "npm run build:client-and-server-bundles-production && npm run webpack:server",
    "serve:ssr": "node dist/server.js",
    "build:client-and-server-bundles": "ng build --prod --build-optimizer && ng run universal-ssr:server --bundleDependencies all",
    "build:client-and-server-bundles-staging": "ng build --c=staging --build-optimizer=true --stats-json  && ng run universal-ssr:server",
    "build:client-and-server-bundles-production": "ng build --c=production --build-optimizer=true  && ng run universal-ssr:server --bundleDependencies all",
    "webpack:server": "webpack --config webpack.config.js --progress --colors",
    "webpack:analyzer": "webpack-bundle-analyzer dist/browser/stats.json",
    "compodoc": "npx compodoc -p src/tsconfig.app.json -o"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^8.2.14",
    "@angular/cdk": "^5.2.5",
    "@angular/common": "^8.2.14",
    "@angular/compiler": "^8.2.14",
    "@angular/core": "^8.2.14",
    "@angular/fire": "^5.4.2",
    "@angular/forms": "^8.2.14",
    "@angular/material": "^5.2.5",
    "@angular/platform-browser": "^8.2.14",
    "@angular/platform-browser-dynamic": "^8.2.14",
    "@angular/platform-server": "^8.2.14",
    "@angular/pwa": "^0.803.24",
    "@angular/router": "^8.2.14",
    "@angular/service-worker": "^8.2.14",
    "@ng-bootstrap/ng-bootstrap": "^4.0.0",
    "@nguniversal/express-engine": "^6.1.0",
    "@nguniversal/module-map-ngfactory-loader": "^6.1.0",
    "angular2-datetimepicker": "^1.1.1",
    "bootstrap": "^4.4.1",
    "city-timezones": "^1.2.0",
    "core-js": "^2.6.11",
    "cors": "^2.8.4",
    "express": "^4.17.1",
    "firebase": "^7.13.1",
    "jquery": "^3.4.1",
    "moment-timezone": "^0.5.27",
    "ng-bootstrap": "^1.6.3",
    "ng2-search-filter": "^0.5.1",
    "ngx-clipboard": "12.2.1",
    "ngx-google-places-autocomplete": "^2.0.4",
    "ngx-pagination": "^3.3.1",
    "ngx-spinner": "^2.0.0",
    "ngx-toggle-switch": "^2.0.5",
    "ngx-ui-switch": "^8.3.0",
    "rxjs": "^6.5.4",
    "rxjs-compat": "^6.0.0",
    "save": "^2.4.0",
    "ts-loader": "^4.0.0",
    "tslib": "^1.10.0",
    "uuid": "^3.4.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.23",
    "@angular/cli": "^8.3.23",
    "@angular/compiler-cli": "^8.2.14",
    "@angular/http": "^7.2.16",
    "@angular/language-service": "^8.2.14",
    "@types/jasmine": "2.8.3",
    "@types/jasminewd2": "^2.0.8",
    "@types/node": "^6.14.9",
    "codelyzer": "^5.0.1",
    "jasmine-core": "~2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^4.4.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^2.1.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "5.4.2",
    "ts-node": "~4.1.0",
    "tslint": "~5.9.1",
    "typescript": "~3.5.3",
    "webpack-cli": "^3.1.0"
  }
}
webpack.config.js:

//解决https://github.com/angular/angular-cli/issues/7200
const path=require('path');
const webpack=require('webpack');
//更改正则表达式以包含要排除的包
const regex=/firebase\/(应用程序| firestore)/;
module.exports={
模式:"生产",,
条目:{
//这是我们的Dynamic universal Express服务器
服务器:'./server.ts'
},
外部:{
“./dist/server/main”:“require(“./server/main”)”
},
目标:'节点',
节点:{
__dirname:false,
__文件名:false,
},
解析:{扩展名:['.ts','.js']},
目标:'节点',
模式:“无”,
//这确保我们包括节点_模块和其他第三方库
外部:[/node\u modules/,函数(上下文、请求、回调){
//将firebase产品从捆绑中排除,以便在运行时使用require()加载它们。
if(正则表达式测试(请求)){
返回回调(null,'commonjs'+请求);
}
回调();
}],
优化:{
最小化:false
},
输出:{
//将输出放在dist文件夹的根目录下
path:path.join(uu dirname,'dist'),
文件名:'[name].js'
},
模块:{
noParse:/polyfills-.\.js/,
规则:[
{test:/\.ts$/,loader:'ts loader'},
{
//将“@angular/core”中的文件标记为使用SystemJS样式的动态导入。
//删除此选项将导致出现弃用警告。
测试:/(\\\\\/)@angular(\\\\\/)core(\\\\\\/).+\.js$/,
解析器:{system:true},
},
]
},
插件:[
新建webpack.ContextReplacementPlugin(
//修复了警告关键依赖项:依赖项的请求是一个表达式
/(.+)?角形(\\\\\/)磁芯(.+)?/,
join(uu dirname,'src'),//src的位置
{}//你的路线图
),
新建webpack.ContextReplacementPlugin(
//修复了警告关键依赖项:依赖项的请求是一个表达式
/(.+)?表示(\\\\\/)(.+)?/,
join(uu dirname,'src'),
{}
)
]
};
server.ts:

import 'zone.js/dist/zone-node';
import * as express from 'express';
/* const express = require('express');
const join = require('path'); */
const compression = require('compression')
import { join } from 'path';
// Express server

const app = express();
// gzip
app.use(compression())


const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(__dirname, 'browser');/* 'dist/browser' */
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { AppServerModuleNgFactory, LAZY_MODULE_MAP, ngExpressEngine, provideModuleMap } = require('./dist/server/main');
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModuleNgFactory,
  providers: [
    provideModuleMap(LAZY_MODULE_MAP)
  ]
}));

app.set('view engine', 'html');
app.set('views', DIST_FOLDER);

// Serve static files from /browser
app.get('*.*', express.static(DIST_FOLDER, {
  maxAge: '1y'
}));

// All regular routes use the Universal engine
app.get('*', (req, res) => {
  res.render('index', { req });
});

// Start up the Node server
app.listen(PORT, () => {
  console.log(`Node Express server listening on http://localhost:${PORT}`);
});

一种解决方法是在dist文件夹旁边安装npm软件包(firebase和@angular/fire),然后运行部署脚本。

您会遇到此错误,因为您使用此=>

const regex=/firebase\/(应用程序| firestore)/;
module.exports={
//这确保我们包括节点_模块和其他第三方库
外部:[/node\u modules/,函数(上下文、请求、回调){
//将firebase产品从捆绑中排除,以便在运行时使用require()加载它们。
if(正则表达式测试(请求)){
返回回调(null,'commonjs'+请求);
}
回调();
}],
};
去掉这个

if(正则表达式测试(请求)){
返回回调(null,'commonjs'+请求);
}
你的应用程序也会很好