This repository has been archived on 2023-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
electroncljs/README.md

183 lines
4.3 KiB
Markdown
Raw Normal View History

2016-12-03 14:13:54 -05:00
# electroncljs
A Leiningen template for [Electron](http://electron.atom.io/)
applications written using ClojureScript, Figwheel and Reagent.
2016-12-03 16:55:14 -05:00
This template is originally based on [descjop](https://github.com/karad/lein_template_descjop).
2016-12-03 14:13:54 -05:00
## Usage
```
$ lein new electroncljs <your-project-name>
```
Then,
```
2016-12-03 16:55:14 -05:00
$ cd <your-project-name>
2016-12-03 14:13:54 -05:00
$ lein npm install
```
2016-12-03 16:55:14 -05:00
This will download all required NPM dependencies.
2016-12-03 14:13:54 -05:00
Once complete you can get to work on your app.
## Getting Started With Electron App Development
I **strongly** recommend first reading the [Quick Start Guide](http://electron.atom.io/docs/tutorial/quick-start/)
on the Electron website before continuing further! At least up until it
starts talking about running/packaging your app, as that part is
different here.
## Project Layout
#### `/app`
The main Electron app directory. Everything in here is what will be
available to your app when it is running and will be included with your
app when packaged for distribution.
You should place your app resources here such as images, CSS, other JS
scripts, etc.
`index.html` is what will be loaded first when your application starts.
`package.json` is used by Electron to specify details about your
application and most importantly what the startup script is. You
probably won't need to change this other then updating the application
name and version as needed.
#### `/src`
Common source directory that will be available to both the Electron
main process code and the renderer process code. You can also think of
this as where you'd put your `.cljc` files if this were a typical
Clojure/ClojureScript web app.
#### `/src_front`
Source root for the Electron renderer process code. This is likely
where the vast majority of your application code will go.
#### `/src_main`
Source root for the Electron main process code.
#### `/env`
Additional source roots for `/src`, `/src_front`, and `/src_main` which
are pulled in for either development or production builds.
There is also an application config map located under
`/env/[profile]/src/[your-project-name]/config.cljs`
## Building
To build both the code for the main and renderer process:
```
$ lein build
```
Or to build each separately:
```
$ lein build-main
$ lein build-front
```
JS artifacts will be output to `/app/js`.
To clean up all build artifacts:
```
$ lein clean
```
## Running
After building, simply do:
```
$ lein run
```
And Electron should start up with your app running.
## Figwheel
IMPORTANT: You should start up Figwheel **before** Electron is running!
```
$ lein figwheel
```
And then in another terminal:
```
$ lein run
```
By default `lein figwheel` will run for the Electron renderer process
code which is probably what you will want the majority of the time.
You can connect to the Figwheel REPL on port 7888. Once connected if
you run:
```
(cljs-repl)
```
You are now set up to work with your renderer process application code.
Note that you can also use Figwheel for the Electron main process, but
do keep in mind that each time you make a code change Electron will
restart to make sure _all_ potential main process code changes are
reloaded.
```
$ lein figwheel main
```
You can change this reload behaviour if you need to by editing the
function `on-figwheel-reload!` located under
`/env/dev/src_main/[your-project-name]/main/init.cljs`. If you do change
this, just remember that certain code changes won't take effect until
Electron relaunches.
## Packaging for Release
Out of the box, you can do:
```
$ lein package
```
Which will prepare an Electron release for your app under `/releases`.
Note that with the default `project.clj` configuration, this will only
build a release for the current platform/architecture.
You can add additional platform/architectures and change other
packaging properties by editing the `package` alias in `project.clj`.
For example, to build for all platforms (Win/Linux/Mac):
```
["with-profile" "prod" "shell" "./node_modules/.bin/electron-packager"
"app" :project/name
~(str "--version=" electron-version)
"--asar"
"--out=releases"
"--overwrite"
"--platform=all"]
```
Building Windows releases under Mac/Linux is supported but you will
need to install Wine.
Packaging is performed via [electron-packager](https://www.npmjs.com/package/electron-packager).
## License
Distributed under the the MIT License. See LICENSE for more details.