add customisable extensions to require hook #75

This commit is contained in:
Sebastian McKenzie 2014-10-16 09:39:52 +11:00
parent c2930c9650
commit 5b08924c02
2 changed files with 45 additions and 7 deletions

View File

@ -172,8 +172,9 @@ to5.transformFile("filename.js", options, function (err, result) {
#### Require hook #### Require hook
All subsequent files required by node will be transformed by 6to5. The polyfill All subsequent files required by node with the extensions `.es6` and `.js` will
specified in [Polyfill](#polyfill) is also required. be transformed by 6to5. The polyfill specified in [Polyfill](#polyfill) is also
required.
```javascript ```javascript
require("6to5/register"); require("6to5/register");
@ -183,7 +184,20 @@ require("6to5/register");
override this by passing an ignore regex via: override this by passing an ignore regex via:
```javascript ```javascript
require("6to5/register")(/regex/) require("6to5/register")(/regex/);
```
You can also customise the file extensions that the require hook will use via:
```javascript
require("6to5/register")({
// optional ignore regex
ignoreRegex: /regex/,
// this will remove the currently hooked extensions of .es6 and .js so you'll
// have to add them back if you want them to be used again
extensions: [".js", ".es6"]
});
``` ```
### Browser ### Browser

View File

@ -2,6 +2,7 @@ require("./polyfill");
var sourceMapSupport = require("source-map-support"); var sourceMapSupport = require("source-map-support");
var to5 = require("./index"); var to5 = require("./index");
var _ = require("lodash");
sourceMapSupport.install({ sourceMapSupport.install({
retrieveSourceMap: function (source) { retrieveSourceMap: function (source) {
@ -17,12 +18,14 @@ sourceMapSupport.install({
} }
}); });
//
var ignoreRegex = /node_modules/; var ignoreRegex = /node_modules/;
var exts = [];
var maps = {}; var maps = {};
var old = require.extensions[".js"]; var old = require.extensions[".js"];
require.extensions[".js"] = var loader = function (m, filename) {
require.extensions[".es6"] = function (m, filename) {
if (ignoreRegex && ignoreRegex.test(filename)) { if (ignoreRegex && ignoreRegex.test(filename)) {
return old.apply(this, arguments); return old.apply(this, arguments);
} }
@ -36,6 +39,27 @@ require.extensions[".es6"] = function (m, filename) {
m._compile(result.code, filename); m._compile(result.code, filename);
}; };
module.exports = function (_ignoreRegex) { var hookExtensions = function (_exts) {
ignoreRegex = _ignoreRegex; _.each(exts, function (ext) {
delete require.extensions[ext];
});
exts = _exts;
_.each(exts, function (ext) {
require.extensions[ext] = loader;
});
};
hookExtensions([".es6", ".js"]);
module.exports = function (opts) {
opts = opts || {};
if (_.isRegExp(opts)) opts = { ignoreRegex: opts };
if (opts.ignoreRegex != null) {
ignoreRegex = opts.ignoreRegex;
}
if (opts.extensions) hookExtensions(opts.extensions);
}; };