Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ben-ng/paq
Multithreaded browserify
https://github.com/ben-ng/paq
Last synced: 21 days ago
JSON representation
Multithreaded browserify
- Host: GitHub
- URL: https://github.com/ben-ng/paq
- Owner: ben-ng
- License: mit
- Created: 2015-03-24T03:48:41.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-07-07T17:52:29.000Z (over 9 years ago)
- Last Synced: 2024-09-17T23:42:15.411Z (about 2 months ago)
- Language: C++
- Homepage:
- Size: 2.27 MB
- Stars: 7
- Watchers: 4
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
# paq
[![Build Status](https://travis-ci.org/ben-ng/paq.svg?branch=master)](https://travis-ci.org/ben-ng/paq) [![Coverage Status](https://coveralls.io/repos/ben-ng/paq/badge.svg)](https://coveralls.io/r/ben-ng/paq)
paq implements a subset of [Browserify](http://browserify.org)'s features with full multithreading support. For impatient people who have to deal with large codebases.
Get updates by following me on Twitter:
[![Follow @_benng](http://i.imgur.com/FImwJ9n.png)](https://twitter.com/_benng)## What's Working
* `require('./relative/path')`
* `require('some-module')`
* `require('node-core-module')`
* `require(path.join(__dirname, 'some_module'))` (or any other statically resolvable expression, like `__dirname + '/path'`)
* Exporting a standalone bundle
* Converting transforms like `hbsfy` for use with `paq`## What's Not Working
* `paq` can't actually run transforms yet. The code is written and tested, but I haven't hooked it up to the CLI because I couldn't decide on what the API should look like.
* Replacement of `process.env` with actual environment vars.## Usage
```
USAGE: paq [options]Options:
--parserTasks= The maximum number of concurrent AST parsers
--requireTasks= The maximum number of concurrent require
evaluations
--standalone Returns a module that exports the entry
file's export
--convertBrowserifyTransform Returns a module that wraps a browserify
transform for use with paq
--ignoreUnresolvableExpressions Ignores expressions in require statements
that cannot be statically evaluated
```## Under The Hood
* Written in Objective-C++
* Uses [a native port of](https://github.com/ben-ng/paq/blob/master/paq/resolve.mm) the `require.resolve` algorithm
* Uses [GCD](https://developer.apple.com/library/prerelease/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html) for concurrency
* No external dependencies; [escodegen](https://github.com/estools/escodegen) and [acorn](https://github.com/marijnh/acorn) are [embedded in the binary](http://www.objc.io/issue-6/mach-o-executables.html)
* [Decent tests](https://github.com/ben-ng/paq/blob/master/paq-tests/main.mm)## Caveats
* Mac only for now. If you get it running elsewhere, send a PR.
* Implements only the subset of Browserify that I need at work.
* Browserify is a production ready, well maintained, and mature project. paq is none of those things, considering I wrote it in about 24 hours.## Contributing
To work on paq, you'll need these tools:
- Xcode 6.2
- OS X 10.10.2
- xctool (Get [Homebrew](http://brew.sh) then `brew install xctool`)
- node
- npmTo run the tests (which require the things mentioned above) you can either run `npm test` from the command line, or run the `paq-test` target in Xcode.