This template can be used to generate a simple web app with Fable and Elmish.
You can find more templates by searching Fable.Template
packages in Nuget.
Although is not a Fable requirement, on macOS and Linux you'll need Mono for other F# tooling like Paket or editor support.
The project can be used by editors compatible with the new .fsproj format, like VS Code + Ionide, Emacs with fsharp-mode or Rider. Visual Studio for Mac is also compatible but in the current version the package auto-restore function conflicts with Paket so you need to disable it: Preferences > Nuget > General
.
In a terminal, run dotnet new -i Fable.Template.Elmish.React::*
to install or update the template to latest version.
In some shells you many need quotations:
dotnet new -i "Fable.Template.Elmish.React::*"
. If you use dotnet SDK 2, you should only need to typedotnet new -i Fable.Template.Elmish.React
.
In a terminal, run dotnet fable-elmish-react -lang F#
to create a project in the current directory. Type dotnet new fable-elmish-react -n awesome
instead to create a subfolder named awesome
and put the new project there.
The project will have the name of the directory. You may get some issues if the directory name contains some special characters like hyphens
npm install
src
folder: cd src
dotnet restore
dotnet fable npm-start
dotnet fable yarn-start
(ornpm-start
) is used to start the Fable daemon and run a script in package.json concurrently. It's a shortcut ofyarn-run [SCRIP_NAME]
, e.g.dotnet fable yarn-run start
.
If you are using VS Code + Ionide, you can also use the key combination: Ctrl+Shift+B (Cmd+Shift+B on macOS) instead of typing the dotnet fable yarn-start
command. This also has the advantage that Fable-specific errors will be highlighted in the editor along with other F# errors.
Any modification you do to the F# code will be reflected in the web page after saving. When you want to output the JS code to disk, run dotnet fable yarn-build
(or npm-build
) and you'll get a minified JS bundle in the public
folder.
Paket is the package manager used for F# dependencies. It doesn't need a global installation, the binary is included in the .paket
folder. Other Paket related files are:
.fsproj
file.Paket dependencies will be installed in the
packages
directory. See Paket website for more info.
JS dependencies will be installed in
node_modules
. See npm website for more info.
Webpack is a bundler, which links different JS sources into a single file making deployment much easier. It also offers other features, like a static dev server that can automatically refresh the browser upon changes in your code or a minifier for production release. Fable interacts with Webpack through the fable-loader
.
The template only contains two F# source files: the project (.fsproj) and a source file (.fs) in src
folder.