Home

Awesome

Salesforce ReactJS SPA Starter

A template project to create ReactJS-based single page application on Salesforce, with automatic build script (Gulp.js)

Because it includes source code transpilation in the build system, you can write the code in CoffeeScript, use some of ES6 JavaScript grammer, or of course vanilla JavaScript (ES5).

As we support react-templates, you don't have to write ReactJS component markup in JSX within your source code. It can be separated to solo template file.

Setup

Make sure you are installing Node.js 0.10.x or later.

$ node --version

Then execute following commands in project directory root:

$ npm install
$ bower install

If you have not installed the gulp command yet, install it by following command :

$ npm install -g gulp

Build Files

Run the gulp command to build runnable codes from source code :

$ gulp

for automatic building you can specify watch task option for gulp

$ gulp watch

Preview

Start web server by following command :

$ gulp dev

Then access to http://localhost:8000.

The command watches source code update and builds automatically.

Test

Run unit tests

$ gulp test

For automatic test execution: (update watch)

$ gulp test:watch

Deploy (Salesforce)

With username and password (may include security token) as environment variables to connect to Salesforce, execute gulp deploy command :

$ SF_USERNAME=yourname@example.org SF_PASSWORD=password gulp deploy

or prepare .env file in KEY=VALUE format:

SF_USERNAME=yourname@example.org
SF_PASSWORD=password

Then execute gulp deploy using foreman :

$ nf run gulp deploy

The nf command can be installed by npm install -g foreman.

Project Directory Structure

├── app                    # Source code directory
│   ├── assets               # HTML, images, fonts, or other static files
│   │   ├── index.html         # Entry point HTML
│   │   ├── ...
│   │
│   ├── scripts              # Script files that can be compiled to JS
│   │   ├── components         # Scripts for ReactJS components 
│   │   │   ├── bar.jsx          # ES6 JS (.js or .jsx), which can include JSX
│   │   │   ├── baz.cjsx         # CoffeeScript (.cjsx or .coffee), which can include JSX
│   │   │   ├── foo.coffee
│   │   │   ├── foo.coffee
│   │   │   ├── ...
│   │   │ 
│   │   ├── main.js            # Entry point of app script
│   │   ├── ...
│   │
│   ├── styles               # Stylesheet files to be compiled to CSS
│   │   ├── components         # Stylesheets for ReactJS components
│   │   │   ├── bar.less
│   │   │   ├── baz.less
│   │   │   ├── foo.less
│   │   │   ├── ...
│   │   │ 
│   │   ├── main.less          # Entry point of CSS
│   │   ├── ...
│   │
│   └── templates            # ReactJS Templates
│       └── components         
│           ├── foo.rt           # matching to app/scripts/components/foo.coffee
│           ├── root.rt          # matching to app/scripts/components/root.js
│           ├── ...
│
├── build                  # Directory which includes all built files generated by gulp script
│   ├── app
│   │   ├── index.html
│   │   ├── scripts
│   │   ├── styles
│   │   ├── ...
│   │
│   └── test
│       ├── ...
│
├── bower.json             # Depending library setting
├── gulpfile.coffee        # Gulp build script
├── package.json           # Project settting
│
├── src                    # Force.com project
│   ├── package.xml
│   ├── pages
│   │   ├── MyAppPage.page
│   │   └── MyAppPage.page-meta.xml
│   └── staticresources
│       ├── MyApp.resource     # Zip file containing built static files (generated by gulp)
│       ├── MyApp.resource-meta.xml
│       ├── MyAppLib.resource  # Zip file containing bower libs (generated by gulp)
│       └── MyAppLib.resource-meta.xml
│
└── test                   # Test code directory
    ├── e2e                  # End-to-End test
    │   ├── app001.test.js
    │   ├── ...
    │
    └── unit                 # Unit test
        ├── components          # ReactJS component unit test
        │   ├── bar.test.js
        │   ├── baz.test.js
        │   ├── foo.test.js
        │   ├── ...
        ├── ...