Не удается запустить Javascript-клиент WebSharper, размещенный на Suave

Я пробую пример фрагмента под названием «Добавление функций на стороне клиента» со следующей страницы:

https://developers.websharper.com/docs/v4.x/fs/overview

Он выглядит немного устаревшим и не компилируется как есть, поэтому на основе исходного репозитория, из которого был взят этот код, вот что у меня есть сейчас.

namespace TestSuaveWs

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI
open WebSharper.UI.Html
open WebSharper.UI.Client

module Server =

    [<Rpc>]
    let DoWork (s: string) = 
        async {
            return System.String(List.ofSeq s |> List.rev |> Array.ofList)
        }

[<JavaScript>]
module Client =

    open WebSharper.JavaScript
    open WebSharper.Html.Client


    let Main () =
        let input = Input [ Attr.Value "" ]
        let output = H1 []
        Div [
            input
            Button [ Text "Send" ]
            |>! OnClick (fun _ _ ->
                    async {
                        let! data = Server.DoWork input.Value
                        output.Text <- data
                    }
                    |> Async.Start
            )
            HR []
            H4 [ Class "text-muted" ] -- Text "The server responded:"
            Div [ Class "jumbotron" ] -< [ output ]
        ]

module TheSite =

    open WebSharper.UI.Server

    [<Website>]
    let MySite =
        Application.SinglePage (fun ctx ->
            Content.Page(
                Body = [
                    h1 [] [ text "Say Hi to the server" ]
                    div [] [ client <@ Client.Main() @> ]
                ]
            )
        )

    open global.Suave
    open Suave.Web
    open WebSharper.Suave

    let webPart = WebSharperAdapter.ToWebPart(MySite, RootDirectory="../..")

Затем идет основная программа.

namespace TestSuaveWs

module Main =

    open System
    open System.Threading
    open Suave

    [<EntryPoint>]
    let main argv =
        let cts = new CancellationTokenSource()
        let conf = { defaultConfig with cancellationToken = cts.Token }
        let listening, server = startWebServerAsync conf TheSite.webPart
        Async.Start(server, cts.Token)
        printfn "Make requests now"
        Console.ReadKey true |> ignore
        cts.Cancel()
        0

Программа запускается, и я вижу текст «Передай привет серверу» на локальном хосте: 8080, но ниже этого текста ничего нет. Картинка на странице с примером показывает, как это должно выглядеть. Там должно быть поле ввода текста, кнопка и текст ответа.

Когда я открываю инструменты разработчика в своем браузере Chrome, я вижу множество похожих сообщений, отличающихся только именем файла javascript, в котором говорится: «Не удалось загрузить ресурс: сервер ответил со статусом 404 WebSharper.Main.min. js:1 (не найдено)"

В папке bin\Debug нет файлов *.js. Я работаю в VS 2019 с .NET Framework 4.7.1.

Что мне не хватает?


person Bent Tranberg    schedule 08.05.2019    source источник


Ответы (1)


Я не знал, что этот самый пример был доступен в виде шаблона под названием «WebSharper 4 Suave-hosted Site», который я нашел только после загрузки и установки WebSharper vsix. Этот шаблон запустил проект, делающий именно то, чего я пытался достичь. Вот и ответ. Хотелось бы, чтобы на это намекнули на странице документации.

person Bent Tranberg    schedule 08.05.2019