Update (Jan 2019): This article was written with an outdated version of Babel (Babel 5). Also, consider replacing Browserify with something more modern like Rollup.
Remove the hassle in writing npm libraries in a transpiled language (babeljs, CoffeeScript, etc) by using browserify.
With this technique, there's no need to maintain a full new directory of compiled files... just one pre-built dist/
file.
Put your actual main entry point as, say, ./lib/index.js
. Then create an entry point ./index.js
like this for development:
Set up a compliation script in the prepublish hook:
For CoffeeScript support, use coffeeify for CoffeeScript (-t [ coffeeify -x .coffee ]
).
Options used:
-s
- standalone (uses a UMD wrapper)--bare
- don't stub node builtins-t
- define transformations to useFor packages targeting Node.js, use --node --no-bundle-external
. This will disable browser-field resolution in package.json and not bundle node_modules.
Set main
in package.json
to the precompiled version:
npm publish
is called, the pre-built version (dist/js2coffee.js) gets builtrequire('js2coffee')
will point to the dist/
versionrequire('../index')
in your tests will point to the source versionrequire('js2coffee/index')
from other packagesFor babeljs, I recommend using --loose
for libraries that will target legacy IE.