Итак, я создал угловые приложения, и когда я сделал ng build --prod
, он пошел успешно , без ошибок и без предупреждений вообще.
Я планирую скопировать все эти сгенерированные файлы из процесса сборки в каталог views/
на моем сервере Node Express, это будет выглядеть следующим образом
--server
---server.js
---views/
----index.html
----main.000000000.js
----runtime.000000.js
----styles.000000.css
----icon_000000.png
----etc (all generated files from `ng build --prod`)
То, что я положил внутрь server.js
, былопростое приложение, как показано ниже:
const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();
app.use(cors());
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// Routes
app.use(express.static(path.join(__dirname, 'views/')));
app.get('*', (req, res) => {
return res.sendFile(path.join(__dirname, `views/index.html`));
});
const port = process.env.PORT || 3001;
app.listen(port);
console.log('Server has started on port ' + port);
Когда я нажму localhost:3001/
, это даст много ошибок Uncaught SyntaxError: Unexpected token <
, ошибка в основном означает, что когда браузер запрашивает те (некоторые)статические файлы будут отвечать сервером index.html
вместо коррелированных статических файлов.
Как я исправляю, используя следующий код:
const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();
app.use(cors());
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const allowed = [
'.js',
'.css',
'.png',
'.jpg',
'.gif',
'.ico',
'.svg',
'.woff',
'.eot',
'.ttf',
];
app.get('*', (req, res) => {
if (allowed.filter(ext => req.url.indexOf(ext) > 0).length > 0) {
res.sendFile(path.resolve(`views/${req.url}`));
} else {
res.sendFile(path.join(__dirname, 'views/index.html'));
}
});
const port = process.env.PORT || 3001;
app.listen(port);
console.log('Server has started on port ' + port);
Однако решение выше грязное,как мы должны жестко кодировать все не .html
статические файлы, которые были внутри /dist
, мне нужно другое решение здесь, как решить эту проблему без жесткого кода каждого расширения статического файла?я делаю что-то не так во время углового ng build --prod
?
Спасибо