Upstream https://github.com/purescript-halogen/purescript-halogen-template is now using parcel as well, and looks actively maintained.
This is a template for starting a fresh project using the purescript-halogen library for declarative user interfaces.
This guide assumes you already have Git and Node.js installed with npm
somewhere on your path. If you use nvm
, the node version manager, you can do nvm use
to get a working node version.
Unlike some other purescript libraries, we use psc-package, because bower has deprecated itself, and bower dependencies don't age well.
npm install --global psc-package
First clone the repo and step into it:
git clone https://github.com/slamdata/purescript-halogen-template.git my-halogen-project
cd my-halogen-project
If you don't already have a global installation of the PureScript compiler and Pulp (or you want a local installation with the appropriate versions) you can run:
npm install
Finally you'll need to install the PureScript library dependencies for this project with Bower:
psc-package update
The project can now be built with:
npm run build
This will build the PureScript source code and produce a bundled JS file as dist/app.js
.
This is an alias for the Pulp command:
pulp build --to dist/app.js
If you open dist/index.html
you should now have a basic working Halogen app.
You can also use the command:
npm run watch
To start a process that will watch the source files and trigger a reload whenever they are modified. Alternatively...
If you're using an editor that supports purs ide
or running pscid
there's an option for getting near-instant builds of the app while you work on it:
npm run parcel:watch
This will start a watch process that uses Parcel to rebundle the app whenever the output files are changed. Since purs ide
rebuilds modules on save, this means you can use this much faster bundle-only rebuild script.
purs ide
only rebuilds one module at a time, so sometimes the bundle will end up in an inconsistent state, resulting in runtime errors. This occurs when a change is made in one module that breaks other modules that depend on it. The solution is to run a full build when a change like this is made, as the compiler will force you to resolve those errors.