Skip to content

Instantly share code, notes, and snippets.

@jenseng
Last active December 13, 2021 22:01
Show Gist options
  • Save jenseng/b45cbc40da86d6533de8ddaa96b2b13d to your computer and use it in GitHub Desktop.
Save jenseng/b45cbc40da86d6533de8ddaa96b2b13d to your computer and use it in GitHub Desktop.
remix on node 12

YMMV, but this worked for me to get Remix working on Node 12. I'm using Restify, but this is really just Node 12 polyfill stuff so it should work with other servers/adapters:

  1. add fs.promises as a dependency
  2. make a module promises-polyfill.js with the following:
    // this polyfills promise stuff for `fs` and even makes `require('fs/promises')` work
    require('fs.promises');
    
    // we also need to polyfill `Promise.all` for remix
    Promise.all = (promises) => {
      if (!promises.length) return Promise.resolve([]);
      if (promises.every(promise => !(promise instanceof Promise))) return new Promise((resolve) => setTimeout(() => resolve(promises)));
      let responses = [];
      let resolvedCount = 0;
      let rejected = false;
      return new Promise((resolve, reject) => {
        promises.forEach(async (promise, i) => {
          try {
            responses[i] = await promise;
            resolvedCount++;
            if (resolvedCount === promises.length) {
              resolve(responses);
            }
          } catch (e) {
            rejected = true;
            if (!rejected) reject(e);
          }
        });
      });
    };
  3. set NODE_OPTIONS='--experimental-modules -r ./PATH/TO/YOUR/promises-polyfill' when running any remix commands (e.g. build or watch) as well as for your server process
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment