New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

npm installs fibers once per dependent module... strangeness ensues #102

Closed
willconant opened this Issue Jan 24, 2013 · 7 comments

Comments

Projects
None yet
6 participants
@willconant
Copy link

willconant commented Jan 24, 2013

If I have a package that both depends on fibers and depends on a package that depends on fibers, I end up with two copies of fibers which seems to screw up Fiber.current because, I presume, there is more than one "global" Fiber object.

Hypothetical directory structure created by npm:

my-app.js
node_modules
    fibers
    cot-fibers
        node_modules
               fibers

When I get a future from cot-fibers and try to wait within a fiber, I get "Can't wait without a fiber" even though I'm definitely within a fiber. If I delete the nested fibers install and try again, everything is fine.

Does this sound like a plausible issue? Or am I just doing something screwy?

@willconant

This comment has been minimized.

Copy link
Author

willconant commented Jan 31, 2013

NPM doesn't work that way. I must have done things in a silly order to produce a pathological node_modules directory structure with two copies of fibers. Cheers!

@willconant willconant closed this Jan 31, 2013

@laverdet

This comment has been minimized.

Copy link
Owner

laverdet commented Jan 31, 2013

No npm certainly does do this and a solution is needed. :)

@laverdet laverdet reopened this Jan 31, 2013

@willconant

This comment has been minimized.

Copy link
Author

willconant commented Jan 31, 2013

If you look at the "Algorithm" section of the npm-install docs (https://npmjs.org/doc/install.html), it explains that sub-modules will only have their dependencies installed in their own node_modules directory if a module higher up doesn't already have that dependency.

I ended up with two copies of fibers because I did things in this order:

  1. create private module that depends on cot-fibers which, in turn, depends on fibers
  2. run npm install in private module directory
  3. realize I needed to be able to require('fibers') in my module and add fibers as dependency
  4. run npm install again

I imagine this is a fairly common mistake for anyone writing a module with fibers, and the error message when this happens isn't particularly helpful, so it probably could use some attention. But it was still somewhat a case of user error.

@olegp

This comment has been minimized.

Copy link

olegp commented Feb 10, 2013

npm prune may be one solution to this

@scriby

This comment has been minimized.

Copy link

scriby commented Feb 25, 2013

I've worked around something similar to this by not specifying a specific version of the module. Something like "fibers": "*". So as long as a version of it was installed by something else, it would use the same version.

@defunctzombie

This comment has been minimized.

Copy link

defunctzombie commented Aug 18, 2013

You should look into the "peerDependency" feature of npm. Also would make sense not to have modules that require fibers install fibers. This seems more like an app level decision.

@lalomartins

This comment has been minimized.

Copy link

lalomartins commented Feb 12, 2014

I found that peerDependency won't necessarily help. In our case, laika-webdriver will peerDepend on laika, and laika depends on fibers. All well and dandy, but laika-webdriver still doesn't have access to the Fibers copy inside laika.

@laverdet laverdet closed this in d9bc3a7 Jan 3, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment