Skip to content

kant2002/repl

 
 

Repository files navigation

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.

About

Fable online REPL

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • F# 90.6%
  • HTML 7.0%
  • SCSS 1.3%
  • JavaScript 0.6%
  • CSS 0.2%
  • Sass 0.2%
  • Other 0.1%