Есть ли способ проксировать запросы в Parcel, как в Webpack?

В Webpack есть возможность проксировать бэкенд-запросы через параметр proxy в файле конфигурации. Это позволяет мне разрабатывать интерфейсную часть моего приложения с помощью webpack-dev-server с HMR, в то время как webpack-dev-server и мой сервер приложений работают на разных портах на моем локальном хосте. В Parcel также есть сервер разработки, который по умолчанию запускается командой parcel index.html через порт 1234. Есть ли способ запускать как сервер разработки Parcel, так и прокси-запросы к моему серверу приложений?

Я нашел решение, которое предлагает использовать для этого промежуточное ПО Express. Но это не решает проблему полностью и чисто. Что, если на моем бэкенде работает Django? Как мне тогда использовать сервер разработки Parcel?


person Andrew Lukjanov    schedule 23.12.2018    source источник
comment
Для справки: работа над этим началась... github.com/parcel-bundler/ посылка/тянуть/2477   -  person Cody Django    schedule 25.02.2019


Ответы (2)


В настоящее время это напрямую не поддерживается, см. открытый запрос на включение https://github.com/parcel-bundler/parcel/pull/2477

Однако https://github.com/parcel-bundler/parcel/issues/55 и перечисляет различные решения с использованием простой оболочки, например:

для http-proxy-middleware >= 1.0.0 (опубликовано 2/2020):

const Bundler = require('parcel-bundler');
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');


const app = express();

app.use(createProxyMiddleware('/api', {
  target: 'http://localhost:3000'
}));

const bundler = new Bundler('src/index.html');
app.use(bundler.middleware());

app.listen(Number(process.env.PORT || 1234));

Для более старых http-proxy-middleware (версии 0.x):

const Bundler = require('parcel-bundler');
const express = require('express');
const proxy = require('http-proxy-middleware');

const app = express();

app.use('/api', proxy({
  target: 'http://localhost:3000/api'
}));

const bundler = new Bundler('src/index.html');
app.use(bundler.middleware());

app.listen(Number(process.env.PORT || 1234));

person simon04    schedule 22.05.2019
comment
идеальный растворитель! Спасибо, сэр ! это лучший способ проксировать посылку! - person Lancer.Yan; 10.09.2019

Существует модуль npm под названием parcel-proxy-server, который может помочь. Я попробовал это сам, и это работает очень хорошо для моего проекта.

Из документации: Создайте файл, например. сервер.js

const ParcelProxyServer = require('parcel-proxy-server');

// configure the proxy server
const server = new ParcelProxyServer({
  entryPoint: './path/to/my/entry/point',
  parcelOptions: {
    // provide parcel options here
    // these are directly passed into the
    // parcel bundler
    //
    // More info on supported options are documented at
    // https://parceljs.org/api
    https: true
  },
  proxies: {
    // add proxies here
    '/api': {
      target: 'https://example.com/api'
    }
  }
});

// the underlying parcel bundler is exposed on the server
// and can be used if needed
server.bundler.on('buildEnd', () => {
  console.log('Build completed!');
});

// start up the server
server.listen(8080, () => {
  console.log('Parcel proxy server has started');
});

затем вызовите node server.js, чтобы запустить прокси, и команду посылки по умолчанию.

person John    schedule 22.07.2019