robertklep / node-metrohash

Node.js bindings for MetroHash
MIT License
26 stars 8 forks source link

Doesn't work in a mono repo #13

Closed mschipperheyn closed 5 years ago

mschipperheyn commented 5 years ago

I have moved my project to a monorepo. I cannot start my project anymore. I get the following error:

✔ success server compiled in 34s 802ms
Could not locate the bindings file. Tried:
 → /Users/me/development/projects/project/packages/server/build/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/out/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/out/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/default/metrohash.node
 → /Users/me/development/projects/project/packages/server/compiled/10.15.1/darwin/x64/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/release/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/debug/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/default/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/lib/binding/node-v64-darwin-x64/metrohash.node
    at bindings (/Users/me/development/projects/project/packages/server/Users/me/development/projects/project/node_modules/bindings/bindings.js:126:1)
    at Object.../../node_modules/metrohash/index.js (/Users/me/development/projects/project/packages/server/build/webpack:/Users/me/development/projects/project/node_modules/metrohash/index.js:1:1)

I'm using version 2.5.1, Mac OS. I've tried removing all the node_modules directories in the project.

robertklep commented 5 years ago

The paths that bindings is using to look for metrohash.node seem incorrect, I would have expected them to contain node_modules/metrohash/ (instead, bindings is trying to find the in packages/server/).

I think this is an issue with your setup, not sure how I can help out. Try to find out if your setup is correctly configured to allow for natively compiled modules to be included.

rgchua commented 5 years ago

I have moved my project to a monorepo. I cannot start my project anymore. I get the following error:

✔ success server compiled in 34s 802ms
Could not locate the bindings file. Tried:
 → /Users/me/development/projects/project/packages/server/build/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/out/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/Debug/metrohash.node
 → /Users/me/development/projects/project/packages/server/out/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/Release/metrohash.node
 → /Users/me/development/projects/project/packages/server/build/default/metrohash.node
 → /Users/me/development/projects/project/packages/server/compiled/10.15.1/darwin/x64/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/release/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/debug/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/addon-build/default/install-root/metrohash.node
 → /Users/me/development/projects/project/packages/server/lib/binding/node-v64-darwin-x64/metrohash.node
    at bindings (/Users/me/development/projects/project/packages/server/Users/me/development/projects/project/node_modules/bindings/bindings.js:126:1)
    at Object.../../node_modules/metrohash/index.js (/Users/me/development/projects/project/packages/server/build/webpack:/Users/me/development/projects/project/node_modules/metrohash/index.js:1:1)

I'm using version 2.5.1, Mac OS. I've tried removing all the node_modules directories in the project.

node bindings searches in the first parent directory where a package.json is found. I'm assuming there's one within /Users/me/development/projects/project/packages/server/

mschipperheyn commented 5 years ago

My metrohash is not in the project root/node_modules not the packages/server/node_modules.

I tried nohoisting it. Didn't work either.

robertklep commented 5 years ago

I don't see how I can help fixing this. If anything is required on the part of node-metrohash to get things working, I'm glad to help, but it seems this is an issue with your specific environment.

mschipperheyn commented 5 years ago

It's possible. It just seems odd to me that this is happening with metrohash only. I was assuming the native bindings were the reason for the problem.

robertklep commented 5 years ago

It's likely that the native bindings are the problem, but within the context of your environment.

Have you tried installing and using the Metrohash module outside of the mono repo (just to make sure that it actually builds and installs properly)?

mschipperheyn commented 5 years ago

Yes, I use it on a similar (non mono) repo.

robertklep commented 5 years ago

If it works outside of the mono repo, it seems to be that the mono repo (setup/config) is the problem. Like I said, I'm happy to help but I have no idea how to solve this issue 😔

mschipperheyn commented 5 years ago

So, comparing a normal repo project and the mono repo project, the difference is as follows: normal: node_modules/metrohash/build/Release/metrohash.node

monorepo there is no node_modules/metrohash/build directory

So, this suggests node-gyp is not running correctly. When I ran node-gyp configure && node-gyp build at the root of the monorepo, I get this.

node-gyp configure
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.3
gyp info using node@10.15.1 | darwin | x64
gyp info spawn /usr/local/bin/python2
gyp info spawn args [ '/Users/me/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/me/project/project/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/me/.config/yarn/global/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/me/.node-gyp/10.15.1/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/me/.node-gyp/10.15.1',
gyp info spawn args   '-Dnode_gyp_dir=/Users/me/.config/yarn/global/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/me/.node-gyp/10.15.1/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/me/project/project',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp: binding.gyp not found (cwd: /Users/me/project/project) while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/me/.config/yarn/global/node_modules/node-gyp/lib/configure.js:336:16)
gyp ERR! stack     at ChildProcess.emit (events.js:189:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command "/Users/me/.nvm/versions/node/v10.15.1/bin/node" "/usr/local/bin/node-gyp" "configure"
gyp ERR! cwd /Users/me/project/project
gyp ERR! node -v v10.15.1
gyp ERR! node-gyp -v v3.6.3
gyp ERR! not ok 
Marcs-MacBook-Pro-2:social-front mschipperheyn$ node-gyp build
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.3
gyp info using node@10.15.1 | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: *** No targets specified and no makefile found.  Stop.
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/me/.config/yarn/global/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:189:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command "/Users/me/.nvm/versions/node/v10.15.1/bin/node" "/usr/local/bin/node-gyp" "build"
gyp ERR! cwd /Users/me/project/project
gyp ERR! node -v v10.15.1
gyp ERR! node-gyp -v v3.6.3
gyp ERR! not ok 

Does this in any way point into a direction of resolution?

robertklep commented 5 years ago

binding.gyp not found is the main issue here.

That file is located (in "normal" situations) in the metrohash module directory, which is also where you need to run the node-gyp commands.

mschipperheyn commented 5 years ago

Ah. So, when I run node-gyp rebuild in the metrohash directory, it completes ok

mschipperheyn commented 5 years ago

So, it's a triggering issue. Scratch that. Even after the node-gyp build, it gives the initial error. It really is two issues:

mschipperheyn commented 5 years ago

Just to close out this issue, I ran into some additional issues, specifically:

TypeError: Cannot read property 'indexOf' of undefined

  685 | /******/
  686 | /******/        // Execute the module function
> 687 | /******/        modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
  688 | /******/
  689 | /******/        // Flag the module as loaded
  690 | /******/        module.l = true;

    at Function.getFileName (webpack-internal:///../../node_modules/bindings/bindings.js:178:16)
    at bindings (webpack-internal:///../../node_modules/bindings/bindings.js:82:48)
    at eval (webpack-internal:///../../node_modules/metrohash/index.js:1:96)
    at Object.../../node_modules/metrohash/index.js (/Users/marcschipperheyn/eclipse-workspace/project-rnw/packages/server/build/server.js:53728:1)
    at __webpack_require__ (/Users/marcschipperheyn/eclipse-workspace/project-rnw/packages/server/build/server.js:687:30)

I ended up solving this by adding both metrohash and node-bindings to the webpack externals array.