Giter Club home page Giter Club logo

repl's Introduction

Fable REPL

Open in Gitpod

Building locally

To develop the REPL locally:

  1. ./fake.sh build -t WatchApp or fake.cmd build -t WatchApp depending on your OS
  2. Open localhost:8080 in your browser

How to add a sample

To add a sample, you need to add an .fs file to the public/samples/Samples.fsproj project (and a corresponding .html file if necessary), then update public/samples/samples.json. This file is used to generate the samples menu in the browser. This commit is a good example of adding a sample (pun intended).

If you just want to update on the existing samples, you can do it directly using Github UI and send a PR automatically.

You can add three types of entries:

  • Category: Adds a title entry to the menu
  • SubCategory: Adds an entry under a category, and make it collapsible
  • MenuItem: Adds a classic item which when clicked will load the sample into the REPL

Category

{
    "type": "category",
    "label": "Learn Fable",
    "children": [
    ]
}
  • label: Will be displayed as the title of the category
  • children: A list of SubCategory or MenuItem

SubCategory

{
    "type": "sub-category",
    "label": "Interop",
    "children": [
    ]
}
  • label: Will be displayed as the title of the SubCategory
  • children: A list of MenuItem

MenuItem

{
    "type": "menu-item",
    "label": "Basic canvas",
    "fsharpCode": "basic-canvas/basic_canvas.fs",
    "htmlCode": "basic-canvas/basic_canvas.html"
}
  • label: Name to display in the menu item
  • fsharpCode: Relative url of the F# code
  • htmlCode (optional field): Relative url of the html code
  • cssCode (optional field): Relative url of the css code

All the urls for fsharpCode, htmlCode are relative to the public/samples folder.

How to build Fable.Repl.Lib

Building the library for the repl is a bit convoluted an involves an additional repository: ncave's fork of the F# compiler. This is used to generate .dlls containing only metada so they're lighter to load in the repl. We need to perform two steps:

  1. Generate the Fable.Repl.Lib.dll (and Browser bindings) assembly that will be used by Fable standalone in the repl (for compilation and analysis)
  2. Generate the JS files for Fable.Repl.Lib that will be loaded by the compiled JS code in the playground

The first step is the most complicated as it requires using a custom build of the F# compiler (in export branch of ncave's fsharp fork). Most of the steps to do this are automated in the src/Export/build.sh script.

The second step can be run with the BuildLib FAKE target.

If you want to use fable-standalone (and base metadata) from a local Fable repo in a sibling folder enable the LOCAL_PKG env var as in LOCAL_PKG=1 dotnet fake build -t BuildLib

One important thing to remember is public inlined functions won't work with precompiled libs so please refrain from using them in Fable.Repl.Lib source.

repl's People

Contributors

alfonsogarciacaro avatar mangelmaxime avatar dependabot[bot] avatar forki avatar ncave avatar nhowka avatar awf avatar xdadaveshaw avatar zaid-ajaj avatar krauthaufen avatar voronoipotato avatar christopher-st avatar et1975 avatar vbfox avatar brikken avatar cartermp avatar chadunit avatar

Stargazers

Roman avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.