canva-public / js2nix

Node.js modules installation using Nix
MIT License
63 stars 14 forks source link

Checks don't work for modules #20

Open olebedev opened 1 year ago

olebedev commented 1 year ago

Some of the NPM modules utilise new feature of Node.js that is called modules, that is declared as:

{
  ...
  "type": "module,
  ...
}

in package.json file. And the current implementation of checks, like:

node -e 'require("/nix/store/4dj4m2yanj5z1182ji9y47vir6w723bk-formdata-polyfill-4.0.10/lib")

doesn't work with that new module type.

I found that for the packages of the module type, this check would work:

node --input-type=module -e 'import  "/nix/store/4dj4m2yanj5z1182ji9y47vir6w723bk-formdata-polyfill-4.0.10/lib/formdata.min.js"'

that is, the check needs to add --input-type=module option and specify the file explicitly.

olebedev commented 1 year ago

As a workaround for the projects that face this check issue:

let
  env = pkgs.js2nix {
    package-json = ./package.json;
    yarn-lock = ./yarn.lock;
    overlays = [
      (self: super: {
        # TODO: remove once this https://github.com/canva-public/js2nix/issues/20 is resolved
        buildNodeModule = pkgs.lib.makeOverridable
          (args: (super.buildNodeModule args).override { doCheck = false; });
      })
    ];
  };
in env.nodeModules

It disables checks for the whole dependency closure.