]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - README.md
Sourcemaps for ide rebuild (#118)
[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
cd124999 62 pscIdeServerArgs: {}, // for example, to change the port {port: 4088}
63 pscIdeRebuildArgs: {} // for example, for sourcemaps {codegen: ['js', 'sourcemaps']}
7de41f10 64 pscIdeColors: false, // defaults to true if psc === 'psa'
86e2b3d4 65 pscPackage: false,
7de41f10
AM
66 bundleOutput: 'output/bundle.js',
67 bundleNamespace: 'PS',
68 bundle: false,
69 warnings: true,
cbb75795 70 watch: false, // indicates if webpack is in watch mode
7de41f10
AM
71 output: 'output',
72 src: [
73 path.join('src', '**', '*.purs'),
86e2b3d4 74 // if pscPackage = false
7de41f10 75 path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
495b765e 76 // if pscPackage = true
77 // source paths reported by `psc-package sources`
2b2207bd 78 ]
7de41f10
AM
79}
80```
5163b5a2 81
495b765e 82### `psc-ide` support (experimental)
5163b5a2
AM
83
84Experimental support for instant rebuilds using `psc-ide-server` can be enabled
85via the `pscIde: true` option.
4343e0eb
MK
86You can use an already running `psc-ide-server` instance by specifying the port in `pscIdeArgs`,
87if there is no server running this loader will start one for you.
88
03f52cb3 89### `psc-package` support (experimental)
90
91Set `pscPackage` query parameter to `true` to enable `psc-package` support. The `psc-package`-supplied source paths
92will be appended to `src` parameter.
93
94### Troubleshooting
4343e0eb 95
03f52cb3 96#### Slower webpack startup after enabling psc-ide support?
4343e0eb
MK
97
98By default, the psc-ide-server will be passed the globs from query.src, this is
99helpful for other tools using psc-ide-server (for example IDE plugins), however
100it might result in a slower initial webpack startup time (rebuilds are not
101affected). To override the default behaviour, add:
102`pscIdeServerArgs: { "_": ['your/*globs/here'] }` to the loader config
103
03f52cb3 104#### Errors not being displayed in watch mode?
4343e0eb 105
03f52cb3 106When the `watch` option is set to `true`, psc errors are appended to
107webpack's compilation instance errors array and not passed back as an
108error to the loader's callback. This may result in the error not being
109reported by webpack. To display errors, the following plugin may be added
110to the webpack config.
111
112```javascript
113const webpackConfig = {
114 // ...
115 plugins: [
116 function(){
117 this.plugin('done', function(stats){
118 process.stderr.write(stats.toString('errors-only'));
119 });
120 }
121 ]
122 // ...
123}
124```
ab944285 125
126#### Error `spawn ENOENT`
127
128This is caused when the loader tries to spawn a binary that does not exists
129(`file or directory not found`). If you call webpack like `webpack` or
be05a055 130`webpack --watch`, then ensure that all required binaries that the
ab944285 131loader depends on are available in your `$PATH`.
132
be05a055 133If you run webpack through an npm script (e.g., npm run or npm start) on NixOS,
134then it will first attempt to find binaries in `node_packages/.bin`.
135If you have the compiler installed through `npm` and it finds it there, this will
136cause `ENOENT`on Nix, because [the binary needs to be patched first, but npm will
137install the binary that is linked with /lib64/ld-linux-x86-64.so.2 - a file that
138will not exist at that path in NixOS](https://github.com/ethul/purescript-webpack-example/issues/5#issuecomment-282492131).
ab944285 139The solution is to simply use the compiler from `haskellPackages.purescript` and
140make sure that it's available in `$PATH`. For more information about how to make
141it work on Nix, see [Purescript Webpack Example](https://github.com/ethul/purescript-webpack-example#using-globally-installed-binaries)