如何在服务器上部署Flutter Web?

p8ekf7hl  于 2023-06-30  发布在  Flutter
关注(0)|答案(6)|浏览(361)

我正在学习Flutter Web。现在我想在真实的的服务器上部署这段代码。flutter代码如下:在lib文件夹中

void main() => runApp(new MyApp());    
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter layout demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter layout demo'),
        ),
        body: Center(
          child: Text('Hello World'),
        ),
      ),
    );
  }
}

如何在服务器上部署此代码?我是Flutter网站的新手。

cnh2zyt3

cnh2zyt31#

[更新]**
要为web创建生产版本,您现在可以直接运行类似于其他平台(android和ios)的flutter build web命令,您将看到**build/web**文件夹与assets文件夹一起生成,您可以简单地将其部署在服务器上。
参见https://docs.flutter.dev/deployment/web

[旧答案步骤1和2不再需要]

您需要使用webdev工具进行生产构建,要安装webdev,您需要一个pub工具。
1.所以转到安装dart SDK的位置,在bin文件夹中应该有一个pub批处理文件。您需要提供bin文件夹到环境变量的路径,以便从cmd使用pub。
1.打开cmd/terminal运行下面的命令安装webdev
pub global activate webdev
1.现在转到项目的根文件夹并在发布模式下进行构建
flutter build web
1.你应该在根目录中看到一个build文件夹(/build/web),只要复制那个文件夹并将其托管在web服务器上即可。
我使用相同的方法将其部署到GitHub页面here's how in detail guide.
一些有用的链接:https://dart.dev/tools/webdev#build
下面是正在运行的flutterweb app

mnowg1ta

mnowg1ta2#

您可以使用Nodejs在共享主机中部署flutter Web应用,或使用PythonVPS服务器中部署flutter Web应用

当你用“flutter build web”构建了你的flutter web应用程序,并且你想把它托管在一个共享主机计划中时,准备你的nodejs应用程序作为你的flutter web应用程序的一个简单的服务器,这里是示例代码
app.js

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public-flutter')));

module.exports = app;

package.json

{
  "name": "flutter-web-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "morgan": "~1.9.1"
  }
}

创建一个文件夹并将其命名为(“public-flutter”),然后将flutter Web应用程序放入您刚刚创建的文件夹中,以便nodejs可以通过他的服务器提供服务。
如果你在VPS服务器上,那么如果你想服务nodejs应用程序,请运行此命令

node app.js

或者,如果你不想使用nodejs,只需在flutter web应用程序中使用python,通过以下命令将其用作简单的http服务器

nohup python -m SimpleHTTPServer 8000 &

只要确保您在运行该命令时位于Web应用程序文件夹中即可。“nohub”会让命令继续运行,即使你在Linux上关闭了SSH会话。或者,您可以使用dhttpd包通过Dart pub/webdev工具为您的应用提供服务。

ctzwtxfj

ctzwtxfj3#

下面是在amazon web server上部署flutter web应用程序的简单方法。
下面是我遵循的简单过程。
1.构建扑动网络:flutter build web —release

  1. Create instance on aws ec2 server:意思是在服务器上为你的网站分配一些内存。示例是AWS云中的虚拟服务器。
    1.在putty的帮助下连接到您的服务器(示例):
  2. Install Vesta control panel在您的服务器上。(如果你不喜欢vesta,你也可以安装其他的控制面板)。
    1.上传您的内容(网站)到服务器上。(在FileZilla的帮助下,您可以轻松地上传您的网站内容到服务器上)
    以下是简单的视频教程:https://youtu.be/htuHNO9JeRU
mqkwyuun

mqkwyuun4#

如果您想通过网络使用您自己服务器,例如您的虚拟专用主机或通过网络的其他主机:
转到项目的根文件夹并在发布模式flutter build web下进行构建,然后
上传(/build/web)目录到你的服务器,你可以按照this link和配置IIS在windows服务器上。

4si2a6ki

4si2a6ki5#

Nota贝内-今天使用flutter 2.0时,我看到一个错误,图像无法上传。今天的表现也不是最好的。书签这一点,我将更新与变通办法。

对于那些使用VPS/共享主机的任何类型的解决方案:

  • 打开本地生成文件夹
  • 压缩(zip)Web文件夹
  • 上传web.zip文件(ftp或文件管理器)
  • 在您的服务器上(例如,在cPanel上选择“从文件管理器中提取”)
  • 将web文件夹重命名为您喜欢的任何名称
  • 请注意,如果您没有使用网站的根目录,则必须将index.html中的文件夹从“/”重命名为“/web/”(以匹配上面的名称,请参阅例如)。
  • 如果您使用的是网站根文件夹,请确保将/web中的所有文件移动到/ website的根文件夹(而不是您的服务器)

例如。

<base href="/"> to  <base href="/web/">

更新缺少镜像问题

**tldr;**两个问题-在pubspec.yaml中,我忘记取消注解assets文件夹,当为web构建时,图像被放置在assets文件夹下面的一个文件夹中。编辑pubspec.yaml并将images文件夹上移一级(在为web构建之后)解决了这个问题。

我的flutter项目文件夹在项目根目录下有一个assets/images文件夹。在没有在线看到图像(在调试过程中可以看到)之后,我发现运行flutter build web --release导致我的assets文件夹在build/web/assets/assets/images中重新创建。我的代码正确引用了assets/images/file.png。我只是在部署到Web时将images文件夹上移了一级。所以我的Web服务器根目录现在有assets/images/name.png,图像显示良好。

解决方案-修复方法是使用适当的资产结构,即在flutter项目根目录中为(images和google_fonts)创建顶级文件夹。然后编译器正确地构建Web项目。我的代码将图像资源引用为images/name.png。yaml应该引用资产:如- images/- google_fonts/

vx6bjr1n

vx6bjr1n6#

如果是Firebase项目,可以使用Firebase Hosting
它会要求您在系统上安装Firebase Tools,您必须在项目的根文件夹中对其进行初始化。
那么你只需要:

flutter build web
firebase deploy

刷新浏览器(可以使用 ctrl + F5ctrl + shift + r

相关问题