]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - README.md
Add troubleshooting "Error spawn ENOENT"
[github/fretlink/purs-loader.git] / README.md
CommitLineData
a42f24b8 1# purs-loader
2
08b34471 3> [PureScript](http://www.purescript.org) loader for [webpack](http://webpack.github.io)
a42f24b8 4
7de41f10
AM
5- Supports hot-reloading and rebuilding of single source files
6- Dead code elimination using the `bundle` option
7- Colorized build output using `purescript-psa` and the `psc: "psa"` option
8
a42f24b8 9## Install
10
63d6a244 11Install with [npm](https://npmjs.org/package/purs-loader).
12
a42f24b8 13```
2d52ea7e 14// For PureScript 0.9 and newer
a9a26a84 15npm install purs-loader --save-dev
2b2207bd 16
495b765e 17// For PureScript 0.8
689268da 18npm install purs-loader@purescript-0.8 --save-dev
a42f24b8 19```
20
a42f24b8 21## Example
22
7de41f10
AM
23```javascript
24const webpackConfig = {
25 // ...
26 loaders: [
27 // ...
28 {
29 test: /\.purs$/,
30 loader: 'purs-loader',
31 exclude: /node_modules/,
32 query: {
33 psc: 'psa',
2b2207bd 34 src: ['bower_components/purescript-*/src/**/*.purs', 'src/**/*.purs']
7de41f10
AM
35 }
36 }
37 // ...
38 ]
39 // ...
40}
41```
42
44eb153b 43Refer to the [purescript-webpack-example](https://github.com/ethul/purescript-webpack-example) for a more detailed example.
44
5163b5a2
AM
45### Options
46
7de41f10
AM
47Default options:
48
49```javascript
86e2b3d4 50const loaderConfig = {
7de41f10
AM
51 psc: 'psc',
52 pscArgs: {},
53 pscBundle: 'psc-bundle',
54 pscBundleArgs: {},
5163b5a2 55 pscIde: false, // instant rebuilds using psc-ide-server (experimental)
39d11a26 56 pscIdeArgs: {}, // for example, to use different psc-ide-server port: {port: 4088}
6ab1eca0 57 pscIdeServerArgs: {}, // for example, to change the port { port: 4088 }
7de41f10 58 pscIdeColors: false, // defaults to true if psc === 'psa'
86e2b3d4 59 pscPackage: false,
7de41f10
AM
60 bundleOutput: 'output/bundle.js',
61 bundleNamespace: 'PS',
62 bundle: false,
63 warnings: true,
cbb75795 64 watch: false, // indicates if webpack is in watch mode
7de41f10
AM
65 output: 'output',
66 src: [
67 path.join('src', '**', '*.purs'),
86e2b3d4 68 // if pscPackage = false
7de41f10 69 path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
495b765e 70 // if pscPackage = true
71 // source paths reported by `psc-package sources`
2b2207bd 72 ]
7de41f10
AM
73}
74```
5163b5a2 75
495b765e 76### `psc-ide` support (experimental)
5163b5a2
AM
77
78Experimental support for instant rebuilds using `psc-ide-server` can be enabled
79via the `pscIde: true` option.
4343e0eb
MK
80You can use an already running `psc-ide-server` instance by specifying the port in `pscIdeArgs`,
81if there is no server running this loader will start one for you.
82
03f52cb3 83### `psc-package` support (experimental)
84
85Set `pscPackage` query parameter to `true` to enable `psc-package` support. The `psc-package`-supplied source paths
86will be appended to `src` parameter.
87
88### Troubleshooting
4343e0eb 89
03f52cb3 90#### Slower webpack startup after enabling psc-ide support?
4343e0eb
MK
91
92By default, the psc-ide-server will be passed the globs from query.src, this is
93helpful for other tools using psc-ide-server (for example IDE plugins), however
94it might result in a slower initial webpack startup time (rebuilds are not
95affected). To override the default behaviour, add:
96`pscIdeServerArgs: { "_": ['your/*globs/here'] }` to the loader config
97
03f52cb3 98#### Errors not being displayed in watch mode?
4343e0eb 99
03f52cb3 100When the `watch` option is set to `true`, psc errors are appended to
101webpack's compilation instance errors array and not passed back as an
102error to the loader's callback. This may result in the error not being
103reported by webpack. To display errors, the following plugin may be added
104to the webpack config.
105
106```javascript
107const webpackConfig = {
108 // ...
109 plugins: [
110 function(){
111 this.plugin('done', function(stats){
112 process.stderr.write(stats.toString('errors-only'));
113 });
114 }
115 ]
116 // ...
117}
118```
ab944285 119
120#### Error `spawn ENOENT`
121
122This is caused when the loader tries to spawn a binary that does not exists
123(`file or directory not found`). If you call webpack like `webpack` or
124`webpack --watch`, then you need to ensure that all required binaries that the
125loader depends on are available in your `$PATH`.
126
127If you use `npm run` and `npm start` on NixOS, then it will first attempt to find
128binaries in `node_packages/.bin`. If you have the compiler installed through `npm`
129and it finds it there, this will cause `ENOENT`on Nix, because
130[the binary needs to be patched first, because npm will install the binary that is
131linked with /lib64/ld-linux-x86-64.so.2 - a file that will not exist at that path in
132NixOS](https://github.com/ethul/purescript-webpack-example/issues/5#issuecomment-282492131).
133The solution is to simply use the compiler from `haskellPackages.purescript` and
134make sure that it's available in `$PATH`. For more information about how to make
135it work on Nix, see [Purescript Webpack Example](https://github.com/ethul/purescript-webpack-example#using-globally-installed-binaries)