Pilequire
Provides an easy way to install a set of transpilers/compilers for a file extension so that modules can be compiled on-demand when they are require()'d.
Disclaimer
This module relies on the deprecated require.extensions.
Even though require.extensions
is likely to never be removed, don't use pilequire
for modules that you want others to depend on.
Instead, you should compile all source code to javascript up front before publishing.
That said, require.extensions
is still widely used (e.g. by coffee-script, traceur-compiler, etc.) for these kinds of scenarios,
and I have not been able to find any good replacement. If you know of a better solution, please let me know.
Use pilequire
to register a set of source transforms/transpilers to run on a given extension, for example:
React JSX w/ES6 syntax
=> valid es6
=> valid es5
const pilequire = ; { // compile and return jsx} { // compile es6 into es5} // Allows you to write React JSX with ECMAScript 6 syntaxpilequire; // Compiles all other `.js` files from ECMAScript 6 to ECMAScript 5pilequire;
The compile functions are applied in the given order, and the source
parameter of each is the return value of the previous compile function
Usage
pilequire.install(extension, transform(s), [filterFn])
Where:
extension
is a string with the file extension to transform, including a leading dot, i.e..js
transform(s)
is either a single function or an array of transform/compile functions with the signaturefunction(filename, source) {...}
filterFn(filename)
is an optional function that is called for every require()d file and should return true or false depending on whether the file should be transformed for not. Use this to e.g. exclude files from thenode_modules
folder:
const EXCLUDE_FILES = /^/pilequire;
Full working example
// -- Compile ES6var traceur = ; // Make sure the traceur runtime is loaded; { var result = traceur; if resulterrorslength > 0 throw resulterrors; return resultjs;} // -- Compile JSXvar React = ; // Import everything in the transformer codepath before we add the import hook// Based on https://github.com/petehunt/node-jsxReact; moduleexports = compileJSX; { try return React; catch e throw 'Error transforming ' + filename + ' to JSX: ' + e; } var pilequire = ; const EXCLUDE_FILES = /^/; { return EXCLUDE_FILES}// Register compilers for .jsx and .jspilequire;pilequire; // Now the React component written with ES6 and JSX can be require()'dvar SomeComponent = ; // So can regular .js-files with es6 syntaxvar moduleWrittenInEs6 = ;