purescript-brunch
v1.1.1
Published
PureScript compiler for Brunch
Downloads
2
Readme
#+title: purescript-brunch
JavaScript Obfuscator plugin for Brunch
Add [[https://purescript.org][PureScript]] supports for Brunch.
Feature
- Automatically download the PureScript toolchain (=purs= and =psc-package=), with configurable version
- Compile and bundle PureScript source into JS module
- Skip foreign module files
Usage
Install the plugin via =npm=:
#+BEGIN_SRC sh npm install --save-dev purescript-brunch #+END_SRC
Or =yarn=:
#+BEGIN_SRC sh yarn add -D purescript-brunch #+END_SRC
To specify options, use =config.plugins.pureScript=.
#+BEGIN_SRC js exports.plugins = { purescript: { version: '0.11.6', entryPoints: { 'src/Main.purs': 'app/main.js' } } } #+END_SRC
Roadmap
- Seamless JS module integration. PureScript already compile into CJS module,
so we should be able to compile individual files pretty easily, however we
need to make sure DCE with bundle still works.
- PS import NPM JS module: the npm deps are not recognized, manually require in the entry-point works great though
- PS import user-defined module: probably not necessary
- JS module import PS module
- Test PureScript module import both user defined and NPM JS module
- The problem now is that it only make sense for the PS to work with =entryPoints=, not as =joinTo= (concatenate).
- Project skeleton
- Seamless JS module integration. PureScript already compile into CJS module,
so we should be able to compile individual files pretty easily, however we
need to make sure DCE with bundle still works.
Motivations
I've been looking at various build system to integrate PureScript into my frontend workflow. The goals are:
- Simple - preferably zero - configuration
- Works with =psc-package=, since bower is now deprecated
- Works with existing JavaScript ecosystem. We should be able to require NPM modules in our foreign definitions.
- Google Closure Compiler friendly.
The solution seems to involve at least two steps build:
- compile =.purs= files into =.js= (basically psc-package build)
- bundle the =.js= files from previous step (basically purs bundle)
- bundle with NPM dependencies
If the module bundler support CommonJS module AND NPM module resolution then step 2 and 3 can be combined.
The impression with existing tools so far:
- Pulp: the recommended way, the output code by Browserify is not minifier friendly, and it can not build any other kind of assets.
- psc-package + purs bundle: does not support NPM module
- psc-package + purs bundle + google-closure-compiler: google-closure-compiler can be used to bundle NPM modules, however the dependency files need to be resolve and include as =--js= argument manually, which is not really practical.
- grunt-purescript: does not support NPM module, grunt is kind of bad regarding multi-step build
- gulp: not tried, probably same as grunt, complex configuration
- webpack: complex configuration
- parcel: custom module format similar to Browserify, not Google Closure Compiler friendly
- brunch: the foreign module gets concatenate with all the other files
License
Copyright 2017 Tung Dao
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.