我打算创建一个纯Dart应用程序,其中HTTP服务器和Web客户端都是用Dart编写的。来自Java和Eclipse的最终目的是我可以在Dart编辑器中打开整个项目层次结构,并能够运行服务于客户端文件的服务器并调试应用程序的两端(服务器端使用DartVM,客户端使用Dartium) )。
我启动了Dart编辑器,在创建了一个简单的命令行应用程序作为服务器端的基础后,我对项目布局感到困惑。
直接服务器端代码文件(Web服务器boostrap类,处理程序和过滤器类)肯定会进入项目bin /文件夹。服务器端依赖项将进入项目的pubspec.yaml文件。
当服务器必须访问客户端应用程序文件(.dart文件,静态页面源等)以便将它们提供给浏览器时,问题就出现了。最简单的解决方案是在服务器项目中创建一个Web文件夹并将客户端Web文件放在那里,但这种方式(据我所知)服务器端依赖项被继承到客户端,因为我们仍然在同一个pubspec范围内。我不想要这个。
我考虑过在项目lib /文件夹中创建一个客户端库并将Web文件放在那里,但我不知道将完整的Web应用程序放到那里是多么好的做法。我想我必须将HTML和其他客户端静态文件放入lib的资产/子文件夹中。我很担心我会以这种方式从IDE中失去Web应用程序辅助。
我还可以做的是将客户端放到一个单独的项目中,像Dart webapp项目一样组织它,它是自己的pubspec.yaml,然后以某种方式使它成为服务器应用程序的依赖项。我不知道这种方式服务器是否可以访问其他项目中的Web文件进行服务。这可能是最好的方法,因为它提供了客户端和服务器文件的清晰分离。
有人可以告诉我这样做的正确方法是什么?
更多解释。 假设我正在使用单独的项目方法,正如其他人已经在答案中提出的那样,但我仍然希望运行能够在开发阶段为客户服务而没有任何花哨的黑客的服务器。服务器必须访问其他项目中的客户端文件。无论是Javascript还是Dart都没关系,无论如何都是静态文件。在开发过程中,我希望提供飞镖文件,因为Dartium可以显着提升它的直接Dart运行能力。
使用Java和Maven,我可以使客户端包成为服务器的运行时依赖项,我可以简单地从类路径中提供客户端文件。 Dart是否支持以类似的方式访问pub依赖项的内部文件,或者唯一的方法是将所有内容放入客户端的资产文件夹中或使用相对路径hack?
答案 0 :(得分:2)
我会选择两个独立的项目
您不需要使客户端程序包依赖于服务器程序包
服务器只需知道客户端软件包的构建输出目录在哪里
通常由客户端请求提供哪些文件。
客户请求例如index.html
和所有其他依赖项(.dart,.hmtl,.js,.img,.css,...)在此文件中进行了硬编码,因此服务器不需要事先知道任何进一步的细节。
答案 1 :(得分:2)
这项工作正在进行中:
为了改善开发体验,您可以使用符号链接作为解决方法,以便在服务器包的目录中提供客户端文件。
我建议在http://www.dartbug.com/new创建功能请求以获得更好的支持。
答案 2 :(得分:1)
我建议组织两个单独的项目。如果您使用此方法,您可能会从中获益。最明显的是客户端和服务器之间没有耦合,你会得到一个非常清晰的分离。另一个是您的服务器可以独立于客户端进化。 Dart应用程序需要编译为javascript。最后,您将拥有一个服务于javascript文件的dart服务器应用程序(如果您决定这样做,可能还有dart文件)。您在服务器端使用的某些软件包在dartium中不可用 - 您不希望必须处理此依赖性混乱。您的服务器可能只包含一个应用程序,也许您的服务器将具有Java或其他语言的模块。分别保留这两个项目可以提供更大的灵活性。