Если я правильно вас понимаю, вы хотите запустить "front-end dev-end", связывающий его с другим внутренним сервером.
Вам не нужно напрямую играть с SystemJS, у меня есть настройка для запуска моего внешнего разработчика dev с указанным внутренним сервером (локальным или удаленным).
Это настройка cli + requirejs (или cli + systemjs).
Я всегда хотел написать учебник о том, как это сделать, но не нашел достаточно свободного времени.
Вот ускоренный курс.
Я использую http-proxy-middleware
в aurelia_project/tasks/run.js
для подключения бэкэнда. Прочитайте мой код, есть URL-адрес бэкенда по умолчанию, и вы можете перезаписать его в командной строке. Обратите внимание, что он поддерживает http / https, вы можете работать с разработчиком над своим производственным приложением, что очень полезно при поиске ошибок.
au run --watch --backend http(s)://other.domain:optional_port
Есть две части, которые нужно изменить.
список прокси-адресов (после const backendProxy = proxy([
),
это URL, которые вы хотите передать запрос на бэкэнд-сервер.
список обходов для historyApiFallback. Вам нужно прочитать
документ о connect-history-api-fallback, чтобы понять, как это работает.
По сути, connect-history-api-fallback пытается перехватить некоторые запросы
и вернуть тот же index.html для поддержки SPA dev. Вам нужно обойти
какой-то запрос к следующему промежуточному программному обеспечению в цепочке.
Мой полный run.js.
import gulp from 'gulp';
import browserSync from 'browser-sync';
import historyApiFallback from 'connect-history-api-fallback/lib';
import {CLIOptions} from 'aurelia-cli';
import project from '../aurelia.json';
import build from './build';
import watch from './watch';
import proxy from 'http-proxy-middleware';
const backend = CLIOptions.getFlagValue('backend') || 'https://localhost:8443';
const isHttps = !!backend.match(/^https/);
const backendProxy = proxy([
'**/WSFed/**',
'**/log*',
'**/login/**',
'**/logout/**',
'**/logoff/**',
'**/assets/**',
'**/images/**',
'**/*.json',
'**/*download*/**',
'**/*download*',
'**/leavingAnalytics'
], {
target: backend,
// logLevel: 'debug',
changeOrigin: true,
secure: false, // bypass certificate check
autoRewrite: true,
// hostRewrite: true,
protocolRewrite: isHttps ? 'https' : 'http'
// onProxyRes: function (proxyRes, req, res) {
// console.log('proxyRes headers: '+ JSON.stringify(proxyRes.headers));
// }
});
function passThrough(context) {
return context.parsedUrl.pathname;
}
function bypass(regex) {
return {
from: regex,
to: passThrough
};
}
let serve = gulp.series(
build,
done => {
browserSync({
ghostMode: false,
reloadDebounce: 2000,
https: isHttps,
online: false,
open: CLIOptions.hasFlag('open'),
port: 9000,
// logLevel: 'debug',
logLevel: 'silent',
server: {
baseDir: [project.platform.baseDir],
middleware: [
historyApiFallback({
// verbose: true,
rewrites: [
{from: /azure\/authorize/, to: '/index.html'},
bypass(/\/WFFed\//),
bypass(/\/login/),
bypass(/\/logout/),
bypass(/\/logoff/),
bypass(/\/assets/),
bypass(/ajax/),
bypass(/download/),
bypass(/leavingAnalytics/)
]
}),
function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
next();
},
backendProxy
]
}
}, function(err, bs) {
if (err) return done(err);
let urls = bs.options.get('urls').toJS();
log(`Application Available At: ${urls.local}`);
log(`BrowserSync Available At: ${urls.ui}`);
done();
});
}
);
function log(message) {
console.log(message); //eslint-disable-line no-console
}
function reload() {
log('Refreshing the browser');
browserSync.reload();
}
let run;
if (CLIOptions.hasFlag('watch')) {
run = gulp.series(
serve,
done => { watch(reload); done(); }
);
} else {
run = serve;
}
export default run;