Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maintaining yarn.lock cross-platform?

I generally run the npm install command on my local dev machine (OSX) in order to collect all of my node modules in one place so I can look through them, get completion in my IDE, etc.

However, I'm new to using yarn, and it seems with the lockfile that some versions of packages are locked to be specific to my development environment, so when I yarn down my package.json in an alpine docker container it tells me things like

warning [email protected]: The platform "linux" is incompatible with this module.

Which I'm guessing means that the package was locked to a specific version or set of dependencies which is specific to OSX.

This doesn't seem to be breaking any functionality yet, but I'm concerned that it might down the line. Any ideas on how to maintain yarn for cross-platform development? Or is what I'm seeing here totally benign?

like image 253
pixelpax Avatar asked Jul 01 '17 14:07

pixelpax


1 Answers

Not really an answer but...

Your example is not an issue specific to yarn, yarn.lock or npm and package-lock.json for that matter. The fsevents package is specifically for MacOS file system events. As such, it won't work on any other platform (e.g. Linux).

If you are using this package directly, you may want to consider a replacement that is cross-platform.

If this warning is coming up because of a dependency to your project, you may want to make sure that it (and it's dependencies) are cross-platform as well.

Oftentimes platform-specific packages exist to make up for a feature that is either incompatible or not present on that platform. So long as you (or your dependency) are handling this correctly, in a per-platform way, you should be fine. These packages are listed in package.json as optional because they are expected to fail on platforms they are not designed for (hence the warning).

For more information on this, Yarn has a good explanation of dependency types which includes optional dependencies:

This is useful for dependencies that won’t necessarily work on every machine and you have a fallback plan in case they are not installed...

https://yarnpkg.com/lang/en/docs/dependency-types/

like image 104
Terrabits Avatar answered Sep 26 '22 14:09

Terrabits