What is the right regex pattern for ignore in @babel/register

1.8k Views Asked by At

I am running mocha on some React components that contain openlayers, the new update ol modules are all written only in ES6 and they have to be transpiled before being passed to mocha for testing.

I am using @babel/register and I am requiring a babel-register.js file in which I require @babel/register and input all the options and presets/plugins. I does not transpile and I get the error you will see down below. All I would like is requiring only the node_modules/ol and recursively all files and subfolders to transpile is the regex correct? Is there anything else wrong? My babel-register.js is as follows:

require("@babel/polyfill");
require("@babel/register")({
    ignore: [
      // When a file path matches this regex then it is **not** compiled
      'node_modules/(?!(ol)/)'
    ],

presets : ["react-app", "@babel/preset-env"],
plugins : [
    "@babel/plugin-transform-modules-commonjs", 
    "inline-react-svg",
    "@babel/plugin-syntax-dynamic-import",
    "@babel/plugin-transform-runtime"
],

//root: __dirname,
extensions: [".es6", ".es", ".jsx", ".js", ".mjs"],

// Setting this to false will disable the cache.
cache: false,
});

Below is the error message I get from transiplation (I am not sure is because of regex):

/home/Development/test-openlayers/node_modules/@babel/runtime/helpers/typeof.js:8
  if (typeof Symbol === "function" && (0, _typeof4.default)(Symbol.iterator) === "symbol") {
                                                           ^

TypeError: (0 , _typeof4.default) is not a function
    at _typeof2 (/home/alessandro/Development/test-openlayers/node_modules/@babel/runtime/helpers/typeof.js:1:62)
    at _typeof2 (/home/alessandro/Development/test-openlayers/node_modules/@babel/runtime/helpers/typeof.js:4:39)
    at Object.<anonymous> (/home/alessandro/Development/test-openlayers/node_modules/lodash.sortby/index.js:95:18)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/whatwg-url/lib/URLSearchParams-impl.js:2:22)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/whatwg-url/lib/URLSearchParams.js:432:14)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/whatwg-url/lib/URL-impl.js:4:25)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/whatwg-url/lib/URL.js:335:14)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/whatwg-url/lib/public-api.js:3:15)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/node_modules/jsdom/lib/api.js:7:19)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.require (/home/alessandro/Development/test-openlayers/setup.js:1:19)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Module._compile (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:83:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (/home/alessandro/Development/test-openlayers/node_modules/pirates/lib/index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Module.require (internal/modules/cjs/loader.js:636:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at requires.forEach.mod (/home/alessandro/Development/test-openlayers/node_modules/mocha/bin/_mocha:511:3)
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (/home/alessandro/Development/test-openlayers/node_modules/mocha/bin/_mocha:510:10)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
    at startup (internal/bootstrap/node.js:285:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
2

There are 2 best solutions below

1
Thomas Skubicki On

Those forward slashes in that regex may need to be escaped

 'node_modules\/(?!(ol)\/)'

That regex throws errors in regex101.com

0
user3523583 On

So, thanks to @Thomas Skubicki, the regex slashes had to be escaped, two more slashes had to be put at the beginning and end of the reg expression and single quotes had to be removed, this is the correct working version of the babel-register.js file.

require("@babel/polyfill");
require("@babel/register")({
    // Array of ignore conditions, either a regex or a function. (Optional)
    ignore: [
      // When a file path matches this regex then it is **not** compiled
      /node_modules\/(?!(ol)\/)/

      // The file's path is also passed to any ignore functions. It will
      // **not** be compiled if `true` is returned.
      //function(filepath) {
        //return filepath !== "/path/to/es6-file.js";
      //},
    ],

    presets : ["react-app"],
    plugins : [
        "@babel/plugin-transform-modules-commonjs", 
        "inline-react-svg",
    ],

    //root: __dirname,

    // Optional only regex - if any filenames **don't** match this regex then they
    // aren't compiled
    //only: /my_es6_folder/,

    // Setting this will remove the currently hooked extensions of `.es6`, `.es`, `.jsx`, `.mjs`
    // and .js so you'll have to add them back if you want them to be used again.
    extensions: [".es6", ".es", ".jsx", ".js", ".mjs"],

    // Setting this to false will disable the cache.
    cache: false,
  });