Переход с angular 4.4.0 на angular 5.2.0 вызывает ошибку при рендеринге на стороне сервера

Я переношу свое угловое приложение с 4.4.0 на 5.2.0, которое поддерживает рендеринг на стороне сервера.

При запуске команды в angular (v5) npm start я получаю эту ошибку

src/server.ts(5,42): error TS2307: Cannot find module '../dist/ngfactory/src/app/app.server.module.ngfactory'.

Кроме того, я проверяю папку dist, в которой нет того же файла. Я думаю, что нужно что-то изменить в конфигурации, чтобы исправить это, чего мне не хватает. Кто-нибудь сталкивался с такой же проблемой?

server.ts содержит:

import 'reflect-metadata';
import 'zone.js/dist/zone-node';
import { platformServer, renderModuleFactory } from '@angular/platform-server'
import { enableProdMode } from '@angular/core'
import { AppServerModuleNgFactory } from '../dist/ngfactory/src/app/app.server.module.ngfactory'
import * as express from 'express';
import { readFileSync } from 'fs';
import { join } from 'path';

const compression = require('compression')

const PORT = 4000;
let forceHttps = false;
const livehoststring = '-';
const livehost = '-';
const staticlivehost = '-';

enableProdMode();

const app = express();

app.use(compression());

const template = readFileSync(join(__dirname, '..', 'dist', 'index.html')).toString();

app.engine('html', (_, options, callback) => {
  const opts = { document: template, url: options.req.url };

  renderModuleFactory(AppServerModuleNgFactory, opts)
    .then(html => callback(null, html));
});

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

app.get('*.*', express.static(join(__dirname, '..', 'dist')));

app.get('*', (req, res) => {
  res.render('index', { req });
});

app.listen(PORT, () => {
  console.log(`listening on http://localhost:${PORT}!`);
});

После прочтения некоторых статей мне кажется, что мне нужно импортировать AppServerModuleNgFactory из другого места. но я не могу найти точное место.

angular-update-guide.firebaseapp.com, если вы используете этот сайт, он скажет вам, что вам нужно изменить / обновить
mxr7350 11.04.2018 13:04

@ mxr7350 Большое спасибо за этот замечательный сайт, но я уже внес все изменения.

Pardeep Jain 11.04.2018 13:14

Можете ли вы сначала попробовать npm build и проверить, есть ли в папке конкретный файл или нет? Я предполагаю, что при сборке может быть какая-то ошибка (просто предположение).

Pankaj Parkar 11.04.2018 16:06

@PankajParkar есть ли разница между ng build и npm build? в любом случае, спасибо, но я решил проблему, с которой столкнулся (как указано ниже в качестве ответа), но теперь застрял на новой ошибке.

Pardeep Jain 12.04.2018 08:14
3
4
298
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил проблему, просто заменив путь импорта AppServerModuleNgFactory в server.ts следующим образом:

const {  AppServerModuleNgFactory } = (module as any).exports;
// import { AppServerModuleNgFactory } from '../dist/ngfactory/src/app/app.server.module.ngfactory'

Заменив это, как указано выше, ваша команда npm start будет работать нормально.

(PS: Но после этого я получил новую ошибку при запуске)

Cannot read property 'moduleType' of undefined

Решение этой проблемы здесь

Другие вопросы по теме