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