1.1.1 • Published 6 years ago

purescript-brunch v1.1.1

Weekly downloads
2
License
Apache-2.0
Repository
github
Last release
6 years ago

#+title: purescript-brunch

  • JavaScript Obfuscator plugin for Brunch

    Add [https://purescript.org] 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
  • 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.