Já falamos várias vezes sobre como componentizar o REPL. Estou pensando em criar um repo diferente para hospedar esses componentes principais. Mas dado que já estamos gerando a compilação FCS + Fable JS aqui e precisamos de algumas partes para outros pacotes (como os assemblies de metadados para fable-compiler-js), é provavelmente mais simples se gerarmos os componentes aqui e retirá-los de outros repositórios .
Então a ideia é colocar aqui:
O fable-compiler / repl deve extrair esses componentes e fornecer o restante da IU e do comportamento. Também será a base para outros sites que incorporam o REPL, por exemplo, para criar tutoriais Markdown F # com avaliação de resultados.
Não deve ser muito complicado criar a infraestrutura, mas dá trabalho, tentarei começar na próxima semana, pois provavelmente sou (a única?) Pessoa que sabe como encaixar todas as peças;)
cc @ncave @MangelMaxime @whitetigle @tpetricek
Estou adicionando @ Krzysztof-Cieslak na discussão.
O componente React para o editor Monaco para código F #.
Também estaria interessado nisso, roubei muito código para fazer o Monaco funcionar no visualizador AST 😅. Embora eu me pergunte se faz mais sentido ter um tipo de coisa Fable.Import.Monaco
.
Por favor, me envie um ping quando estiver pronto. Adoraria integrar o Fable com o Klipse para permitir que o pessoal do F # escrevesse postagens de blog e tutoriais com trechos de código interativos.
Isso está completo :) Agora os assemblies necessários para compilar projetos F # com Fable estão disponíveis no pacote fable-metadata
npm, enquanto FCS + Fable compilado para JS estão sendo enviados em fable-standalone
, junto com um trabalhador da web que pode ser incorporado em um site.
Fable REPL já depende desses pacotes. As instruções são mais ou menos assim:
fable-metadata/lib
e fable-standalone/dist
para onde quer que você esteja exibindo seus arquivos estáticos: exemploFable.Standalone
e Fable.WebWorker
namespaces respectivamente):fable-standalone/src/Interfaces.fs
fable-Standalone/src/Worker/Shared.fs
Inicie o web worker com algumas informações (mais importante, onde os assemblies de metadados podem ser encontrados).
Verifique o arquivo src / App / Main.fs e veja as mensagens do trabalhador para saber como interagir com o trabalhador.
@alfonsogarciacaro Esse foi um ótimo retrabalho e simplificação do repo! Mal posso esperar pela postagem / tweet do blog :)
Excelente trabalho de todos vocês 🎉
@ncave Mas você não tem uma conta no Twitter, ou tem? ;) TBH, estou um pouco preocupado em tornar isso muito público porque ainda não é trivial executar o código gerado e temo que se as pessoas tentarem incorporar o REPL em seus sites, haverá muitos outros problemas para resolver: /
@alfonsogarciacaro Claro que não, isso não quer dizer que não sigo;)
Eu só estava brincando, quem quiser saber já (provavelmente) sabe por te seguir no GitHub.
Próximo passo -> para a Lua! (Quero dizer, projetos F # em REPL, hint hint cotovelo jab ;)
@viebel As instruções para fazer isso estão no comentário acima . Eu posso ajudá-lo a reduzi-los a chamar uma função eval (e provavelmente uma função init no início), mas observe que sem o webworker a experiência do usuário não será boa porque a IU do Klipse irá congelar enquanto o compilador está carregando ou compilando.
@alfonsogarciacaro Não estou muito preocupado com o congelamento da IU do Klipse durante a compilação, presumindo que demore menos de 300 ms para trechos de código curtos.
Por favor me ajude a reduzir as instruções para uma chamada de função init + eval
Fechando porque não estamos alocando recursos no REPL.
Comentários muito úteis
@alfonsogarciacaro Claro que não, isso não quer dizer que não sigo;)
Eu só estava brincando, quem quiser saber já (provavelmente) sabe por te seguir no GitHub.
Próximo passo -> para a Lua! (Quero dizer, projetos F # em REPL, hint hint cotovelo jab ;)