我怎样才能 运行 一个 Svelte/Sapper 应用超过 HTTPS/SSL?

How can I run a Svelte/Sapper app over HTTPS/SSL?

我似乎无法通过 https 找到任何关于 运行ning Svelte 应用程序的信息。我想在 https 上为开发人员和生产人员 运行。我可以在 package.json 的脚本中使用 --port 参数更改端口,但显然这不会将协议从 http 更改为 https。

目前看来唯一的方法是 运行 在 Svelte/Sapper 应用程序前面设置反向代理(如 nginx)。

E:抱歉...这是一段时间内唯一的答案。我是删除这个还是什么?

这与 sapper 无关。只需使用您的服务器框架的选项。你用express还是polka?听从他们的指示!

您需要从某个地方创建 SSL 证书(例如 ZeroSSL)。如果您已经有 certificate.crtprivate.key 文件,请编辑您的 server.js 文件。

<sapper project directory>/src/server.js的原始源代码是:

import sirv from 'sirv';
import polka from 'polka';
import compression from 'compression';
import * as sapper from '@sapper/server';

const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';

polka() // You can also use Express
    .use(
        compression({ threshold: 0 }),
        sirv('static', { dev }),
        sapper.middleware()
    )
    .listen(PORT, err => {
        if (err) console.log('error', err);
    });

您可以像这样添加和更改此文件 (server.js) 的一些代码:

import sirv from 'sirv';
import polka from 'polka';
import compression from 'compression';
import * as sapper from '@sapper/server';

const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';

const { createServer } = require('https');
const { readFileSync } = require('fs');
const ssl_port = 443;

const options = {
  // The path & file names could be different.
  key: readFileSync('/home/ubuntu/ssl/private.key'),
  cert: readFileSync('/home/ubuntu/ssl/certificate.crt')
};

const { handler } = polka()
    .use(
        compression({ threshold: 0 }),
        sirv('static', { dev }),
        sapper.middleware()
    )
    .get('*', (req, res) => {
        res.end(`POLKA: Hello from ${req.pathname}`);
    });

// Mount Polka to HTTPS server
createServer(options, handler).listen(ssl_port, _ => {
    console.log(`> Running on https://localhost:${ssl_port}`);
});

添加的代码是:

const { createServer } = require('https');
const { readFileSync } = require('fs');
const ssl_port = 443;

const options = {
  // The path & file names could be different.
  key: readFileSync('/home/ubuntu/ssl/private.key'),
  cert: readFileSync('/home/ubuntu/ssl/certificate.crt')
};

更改后的代码为:

const { handler } = polka()
    .use(
        compression({ threshold: 0 }),
        sirv('static', { dev }),
        sapper.middleware()
    )
    .get('*', (req, res) => {
        res.end(`POLKA: Hello from ${req.pathname}`);
    });

// Mount Polka to HTTPS server
createServer(options, handler).listen(ssl_port, _ => {
    console.log(`> Running on https://localhost:${ssl_port}`);
});

然后由于端口 443 的许可,您必须 运行 您的 Svelte/Sapper 应用 sudo。(像这样:sudo npm run devsudo npm run start)

在你 运行 sudo npm run dev 之后,你可能会看到消息:

$ sudo npm run dev

> TODO@0.0.1 dev /home/ubuntu/ensayar-sapper
> sapper dev

✔ server (2.1s)
✔ client (2.1s)
> Running on https://localhost:443
✔ service worker (42ms)
> Server is not listening on port 3000

您可以忽略消息Server is not listening on port 3000