fable-compiler-netcore
Version:
F# to JavaScript compiler
86 lines (59 loc) • 5.52 kB
Markdown
# F# |> BABEL
### The compiler that emits JavaScript you can be proud of!
[](https://travis-ci.org/fable-compiler/Fable) [](https://ci.appveyor.com/project/alfonsogarciacaro/fable) [](https://www.npmjs.com/package/fable-compiler) [](https://gitter.im/fable-compiler/Fable?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[RELEASE NOTES](https://github.com/fable-compiler/Fable/blob/master/RELEASE_NOTES_COMPILER.md) · [Follow us on Twitter!](https://twitter.com/FableCompiler)
Fable brings together the power of the [F# compiler](http://fsharp.github.io/FSharp.Compiler.Service/)
and [Babel](http://babeljs.io) to make JavaScript a true backend for F#.
Some of its main features are:
- Works directly on F# source code, no compilation to .NET bytecode needed
- Optimizes F# code to generate as clean JavaScript as possible
- Passes location data to Babel to generate source maps
- Compatible with all Babel plugins and other JS development tools, like [Webpack](https://webpack.github.io)
- Support for most of the [F# core library](http://fable-compiler.github.io/docs/compatibility.html) and a bit of .NET Base Class Library
- Tiny core library included (around 20KB minified and gzipped) with no runtime
- Organizes code using ES6 modules
- Interacts seamlessly with other [JavaScript libraries](http://fable-compiler.github.io/docs/interacting.html)
- Bonus: compile [NUnit tests to Mocha](http://fable-compiler.github.io/docs/compiling.html#Testing)
## Usage
Fable is distributed through [npm](https://www.npmjs.com/package/fable-compiler)! You can install and run it just by typing:
```shell
npm install -g fable-compiler
fable path/to/your/project.fsproj
```
> Note the package name is `fable-compiler` while the command is just `fable`
You can find more detailed instructions about F# to JS compilation in the [docs](http://fable-compiler.github.io/docs/compiling.html).
Also you can have a look at the [samples](http://fable-compiler.github.io/samples.html) or download them from [here](https://ci.appveyor.com/api/projects/alfonsogarciacaro/fable/artifacts/samples.zip).
## Requirements
You must have [F# 4](http://fsharp.org) and [node 4.4](https://nodejs.org/en/) or higher installed in your computer.
If you are having problems to use Fable under Windows, try the following:
- Make sure `fsc.exe` is added to the path.
- Install MSBuild tools 2013.
## Contributing
Just by using Fable you're already contributing! You can help a lot the community
by sharing examples and experiences in your personal blog or by sending a PR to Fable's
website ([see this](https://github.com/fable-compiler/Fable/issues/162) for more info).
Send bug reports (ideally with minimal code to reproduce the problem) and feature requests
to the [GitHub repository](https://github.com/fable-compiler/Fable/issues). Issues with the label `discussion` will be also added to ask the opinion of the community
on different topics like the logo, roadmap, etc. For more immediate comments you can use the [Gitter chat](https://gitter.im/fable-compiler/Fable).
A [plugin system](http://fable-compiler.github.io/docs/plugins.html) is also available
to allow you extend Fable according to you needs.
## Caveats
- **Options are erased** in compiled code. This has several benefits like removing overhead
and interacting with native JS functions in a safer way (`null` will be `None`).
However, it will lead to unexpected results if you do weird things like wrapping `null` in `Some`.
For practical purposes, Fable considers `null`, `undefined`, `None` and `unit` to be the same thing.
- **Information about generic types is not included** in the generated JavaScript, so code that
depends on this information to be known at runtime for method dispatching may have unexpected behaviour.
To know more, read [Compatibility](http://fable-compiler.github.io/docs/compatibility.html).
## Acknowledgements
Of course, this project wouldn't have been possible without the fantastic work of the [F# compiler](http://fsharp.github.io/FSharp.Compiler.Service/)
and [Babel](http://babeljs.io) teams. I hope they feel proud seeing how their work has met in
a very unexpected way, giving developers even more possibilities to build great apps.
The awesome F# community has played a big role in making this possible. I've met incredible
people and it's impossible to list all the names without forgetting anyone, but I'd like to
give a particular mention to [Zach Bray](https://github.com/ZachBray) for his work on [FunScript](http://funscript.info/), [Don Syme](https://github.com/dsyme) (the fact that the designer
of the language himself shows interest in your work, no matter how humble it is, is really a big push!)
and [Krzysztof Cieślak](https://github.com/Krzysztof-Cieslak) (I always have to look up the name to spell it correctly) because he's shown that
F# is a perfect fit for a [big project targeting JS](http://ionide.io/).
And finally I'd like to thank my partner (is it too old-fashioned to say wife?) for bearing with me
everyday.