> [PureScript](http://www.purescript.org) loader for [webpack](http://webpack.github.io)
+- Supports hot-reloading and rebuilding of single source files
+- Dead code elimination using the `bundle` option
+- Colorized build output using `purescript-psa` and the `psc: "psa"` option
+
## Install
Install with [npm](https://npmjs.org/package/purs-loader).
-This loader works in conjunction with the [PureScript webpack plugin](https://npmjs.org/package/purescript-webpack-plugin). Ensure the plugin is installed and configured accordingly.
-
```
+// For PureScript 0.9 and newer
npm install purs-loader --save-dev
-```
-## Options
-
-###### `pscBundle` (String)
-
-Relative path to the bundled JavaScript file generated by the `PurescriptWebpackPlugin`. The default value is `output/bundle.js`.
+// For PureScript 0.8
+npm install purs-loader@purescript-0.8 --save-dev
+```
## Example
-```js
-// webpack.config.js
-'use strict';
+```javascript
+const webpackConfig = {
+ // ...
+ loaders: [
+ // ...
+ {
+ test: /\.purs$/,
+ loader: 'purs-loader',
+ exclude: /node_modules/,
+ query: {
+ psc: 'psa',
+ src: ['bower_components/purescript-*/src/**/*.purs', 'src/**/*.purs']
+ }
+ }
+ // ...
+ ]
+ // ...
+}
+```
+
+Refer to the [purescript-webpack-example](https://github.com/ethul/purescript-webpack-example) for a more detailed example.
+
+### Options
+
+Default options:
+
+```javascript
+const loaderConfig = {
+ psc: 'psc',
+ pscArgs: {},
+ pscBundle: 'psc-bundle',
+ pscBundleArgs: {},
+ pscIde: false, // instant rebuilds using psc-ide-server (experimental)
+ pscIdeArgs: {}, // for example, to use different psc-ide-server port: {port: 4088}
+ pscIdeServerArgs: {}, // for example, to change the port { port: 4088 }
+ pscIdeColors: false, // defaults to true if psc === 'psa'
+ pscPackage: false,
+ bundleOutput: 'output/bundle.js',
+ bundleNamespace: 'PS',
+ bundle: false,
+ warnings: true,
+ watch: false, // indicates if webpack is in watch mode
+ output: 'output',
+ src: [
+ path.join('src', '**', '*.purs'),
+ // if pscPackage = false
+ path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
+ // if pscPackage = true
+ // source paths reported by `psc-package sources`
+ ]
+}
+```
-var PurescriptWebpackPlugin = require('purescript-webpack-plugin');
+### `psc-ide` support (experimental)
-var src = ['bower_components/purescript-*/src/**/*.purs', 'src/**/*.purs'];
+Experimental support for instant rebuilds using `psc-ide-server` can be enabled
+via the `pscIde: true` option.
+You can use an already running `psc-ide-server` instance by specifying the port in `pscIdeArgs`,
+if there is no server running this loader will start one for you.
-var ffi = ['bower_components/purescript-*/src/**/*.js', 'src/**/*FFI.js'];
-var modulesDirectories = [
- 'node_modules',
- 'bower_components'
-];
+#### Slower webpack startup after using purs-loader ?
-var config
- = { entry: './src/entry'
- , output: { path: __dirname
- , pathinfo: true
- , filename: 'bundle.js'
- }
- , module: { loaders: [ { test: /\.purs$/
- , loader: 'purs-loader'
- } ] }
- , resolve: { modulesDirectories: modulesDirectories }
- , plugins: [ new PurescriptWebpackPlugin({src: src, ffi: ffi}) ]
- }
- ;
+By default, the psc-ide-server will be passed the globs from query.src, this is
+helpful for other tools using psc-ide-server (for example IDE plugins), however
+it might result in a slower initial webpack startup time (rebuilds are not
+affected). To override the default behaviour, add:
+`pscIdeServerArgs: { "_": ['your/*globs/here'] }` to the loader config
-module.exports = config;
-```
+### `psc-package` support (experimental)
-See the [example](https://github.com/ethul/purs-loader/tree/master/example) directory for a complete example.
+Set `pscPackage` query parameter to `true` to enable `psc-package` support. The `psc-package`-supplied source paths
+will be appended to `src` parameter.