reason-scripts

:beginner: Create a ReasonML and React development environment

Github星跟蹤圖

Reason Scripts provides a JS-like development environment for developing web apps with the
Reason programming language and
React. It bootstraps an environment to automatically
compile all Reason code to JS, provide features like reloading and bundling, and seamlessly
use JS code from Reason.

Build Status
Build status

Getting Started

Using Yarn

Note that using yarn create requires Yarn 0.25 or later

To create a new app using Reason and React, run:

$ npm install -g bs-platform
$ yarn create react-app <app-name> --scripts-version reason-scripts
$ cd <app-name>
$ yarn start

Make sure to install bs-platform globally using npm instead of yarn.

Using npm

$ npm install -g bs-platform
$ npx create-react-app <app-name> --scripts-version reason-scripts
$ cd <app-name>
$ npm start

(npx comes with npm 5.2+ and higher, see instructions for older npm versions)

The policy of reason tooling is to support the current LTS release, so please make sure you have Node 8 or later.

Directory Layout

Creating a new app makes an <app-name> directory with the following layout:

<app-name>/
  README.md
  node_modules/
  package.json
  bsconfig.json
  .gitignore
  public/
    favicon.ico
    index.html
  src/
    index.re
    index.css
    app.re
    app.css
    logo.svg

Features

Everything from Create React App

  • Highly-optimized build configuration
  • Pre-configured test runner
  • Friendly developer environment
  • "eject" Webpack config
  • Environment variable configuration
  • Automatic PWA configuration
  • Low configuration builds

Reason Entrypoint

The entry point to the app is src/index.re. From the start your new
app will be based on Reason, but can seamlessly interop with existing JS
files and projects!

Automatic Compilation of Reason/OCaml files

Any Reason/OCaml file will be automatically compiled to a JS file. For example,
a file called math_fns.re can be required by a JS file:

import { add } from './math_fns.re'

const sum = add(1, 4)

Jest Integration

Reason Scripts will automatically configure a Jest environment
to test Reason code. Any code found in a file ending with _test.re, _test.ml
or test.js will be considered a test and run with Jest. From these files, the normal
Jest API can be used interacting with any other modules defined in your app. For example:

/* math_fns.re */

let add = (x, y) => x + y;
/* math_fns_test.re */

open Jest;

test("addition", () => {
  let num_1 = 10;
  let num_2 = 12;

  expect(Math_fns.add num_1 num_2), > toBe(22);
});

Or if you prefer writing your tests in JavaScript, just don't forget to import the tested module:

/* maths_fns.test.js */

import Math_fns from './math_fns.re'

test('addition', () => {
  const num1 = 10
  const num2 = 12

  expect(Math_fns.add(num1, num2)).toBe(22)
})

For more documentation on the Jest API, see bs-jest

Importing non-Reason files

You can require CSS files with:

[%bs.raw {, require('./App.css'), }];

or any other kind of file (like SVG's) with:

let logo : string = [%bs.raw {, require('./logo.svg'), }];

Help, Tips, and Tricks

Try running npm install in your project directory. This helps refresh missing dependencies sometimes.

If this still does not work, make sure your file path does not include any spaces.

Editor support is provided by Merlin. To generate a .merlin file, run the app
with npm start or yarn start.

See our full editor integration guide here: https://reasonml.github.io/docs/en/editor-plugins.html

Use FORCE_COLOR=true react-scripts start, cat - as your start command instead

Checkout our fancy website: https://reasonml.github.io/!

We also have a very active Discord to come talk about Reason, and ask for help: https://discordapp.com/invite/reasonml

主要指標

概覽
名稱與所有者rrdelaney/reason-scripts
主編程語言JavaScript
編程語言JavaScript (語言數: 5)
平台
許可證MIT License
所有者活动
創建於2017-06-06 07:35:19
推送於2018-10-09 16:34:12
最后一次提交2018-10-09 17:32:22
發布數2
最新版本名稱v1.0.0 (發布於 )
第一版名稱v0.9 (發布於 )
用户参与
星數628
關注者數12
派生數58
提交數1.5k
已啟用問題?
問題數49
打開的問題數0
拉請求數25
打開的拉請求數0
關閉的拉請求數6
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?