yarnpkg / yarn

The 1.x line is frozen - features and bugfixes now happen on https://github.com/yarnpkg/berry
https://classic.yarnpkg.com
Other
41.39k stars 2.72k forks source link

Yarn fails on transitive optional dependencies that aren't compatible with the current OS #525

Closed Daniel15 closed 7 years ago

Daniel15 commented 7 years ago

Yarn handles this correctly for direct dependencies (ie. dependencies in the package.json of the app you're running Yarn on), but not for transitive dependencies (ie. dependencies of those dependencies).

Example package.json to repro on Windows:

{
  "name": "hello",
  "version": "0.0.1",
  "dependencies": {
    "chokidar": "1.6.0"
  }
}

Example package.json to repro on Linux or Mac OS X:

{
  "name": "hello",
  "version": "0.0.1",
  "dependencies": {
    "@daniel15/win-test-2": "0.0.1"
  }
}

chokidar has an optional dependency on fsevent, which only works on Mac OS. Similarly, @daniel15/win-test-2 has an optional dependency on @daniel15/win-test which only works on Windows.

Output from npm install:

npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.14

Output from yarn (Windows):

error fsevents@1.0.14: The platform "win32" is incompatible with this module.
error Found incompatible module
    at MessageError (c:\src\yarn\lib\errors.js:9:1)
    at PackageCompatibility.check (c:\src\yarn\lib\package-compatibility.js:166:13)
    at PackageCompatibility.init (c:\src\yarn\lib\package-compatibility.js:173:12)
    at c:\src\yarn\lib\cli\commands\install.js:312:38
    at next (native)
    at step (c:\src\yarn\node_modules\babel-runtime\helpers\asyncToGenerator.js:17:30)
    at c:\src\yarn\node_modules\babel-runtime\helpers\asyncToGenerator.js:28:20

Output from Yarn (Debian Linux):

error @daniel15/win-test-2@0.0.1: The platform "linux" is incompatible with this module.
error Found incompatible module
    at MessageError (/home/daniel/src/yarn/lib-legacy/errors.js:9:1)
    at PackageCompatibility.check (/home/daniel/src/yarn/lib-legacy/package-compatibility.js:170:13)
    at PackageCompatibility.init (/home/daniel/src/yarn/lib-legacy/package-compatibility.js:177:12)
    at /home/daniel/src/yarn/lib-legacy/cli/commands/install.js:326:38
    at next (native)
    at step (/home/daniel/src/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at /home/daniel/src/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:28:20
    at run (/home/daniel/src/yarn/node_modules/core-js/library/modules/es6.promise.js:87:22)
    at /home/daniel/src/yarn/node_modules/core-js/library/modules/es6.promise.js:100:28
    at flush (/home/daniel/src/yarn/node_modules/core-js/library/modules/_microtask.js:18:9)

This blocks installation of create-react-app, browserify and webpack on Windows (among other things) as they all have a dependency on either chokidar or fsevents

Daniel15 commented 7 years ago

@kittens - Any ideas if this is an easy fix? I think it's blocking for launch given Windows and Linux users currently can't install packages that have a transitive dependency on fsevents.

Daniel15 commented 7 years ago

Looks like this regressed at some point 😢 #1285

kenotron commented 7 years ago

I think this change fixed it half-way, fixing #1285 should bring it to completion. @kittens can you please take a look?

bcomnes commented 7 years ago

Ran into this issue today with winston-winlog3 in optionalDependencies on macOS.

BasmaRadadi commented 6 years ago

hello i am using windows 10 and i am working with Jhipster ( with Angular1 ans Postgres as SGDB) and i have have same bug and here is my package.json file { "name": "j-hipster-registry", "version": "0.0.0", "description": "Description for JHipsterRegistry", "private": true, "cacheDirectories": [ "node_modules" ], "dependencies": { "@angular/common": "4.0.0", "@angular/compiler": "4.0.0", "@angular/core": "4.0.0", "@angular/forms": "4.0.0", "@angular/http": "4.0.0", "@angular/platform-browser": "4.0.0", "@angular/platform-browser-dynamic": "4.0.0", "@angular/router": "4.0.0", "@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.23", "angular2-cookie": "1.2.6", "angular2-infinite-scroll": "0.3.4", "bootstrap": "4.0.0-alpha.6", "core-js": "2.4.1", "font-awesome": "4.7.0", "gulp": "^3.9.1", "jquery": "3.2.1", "ng-jhipster": "0.1.12", "ng2-webstorage": "1.6.2", "reflect-metadata": "0.1.10", "rxjs": "5.3.0", "swagger-ui": "2.2.10", "tether": "1.4.0", "zone.js": "0.8.5" }, "devDependencies": { "@angular/cli": "1.0.0", "@angular/compiler-cli": "4.0.0", "@types/jasmine": "2.5.47", "@types/node": "7.0.12", "add-asset-html-webpack-plugin": "1.0.2", "angular2-template-loader": "0.6.2", "awesome-typescript-loader": "3.1.2", "browser-sync": "2.18.8", "browser-sync-webpack-plugin": "1.1.4", "codelyzer": "2.1.1", "copy-webpack-plugin": "4.0.0", "css-loader": "0.28.0", "del": "2.2.2", "event-stream": "3.3.4", "exports-loader": "0.6.4", "extract-text-webpack-plugin": "2.1.0", "file-loader": "0.11.1", "generator-jhipster": "4.3.0", "html-loader": "0.4.5", "html-webpack-plugin": "2.28.0", "jasmine-core": "2.5.2", "karma": "1.6.0", "karma-chrome-launcher": "2.0.0", "karma-coverage": "1.1.1", "karma-intl-shim": "1.0.3", "karma-jasmine": "1.1.0", "karma-junit-reporter": "1.2.0", "karma-notify-reporter": "1.0.1", "karma-phantomjs-launcher": "1.0.4", "karma-remap-istanbul": "0.6.0", "karma-sourcemap-loader": "0.3.7", "karma-webpack": "2.0.3", "lazypipe": "1.0.1", "lodash": "4.17.4", "map-stream": "0.0.7", "phantomjs-prebuilt": "2.1.14", "proxy-middleware": "0.15.0", "rimraf": "2.6.1", "run-sequence": "1.2.2", "sourcemap-istanbul-instrumenter-loader": "0.2.0", "string-replace-webpack-plugin": "0.1.3", "style-loader": "0.16.1", "to-string-loader": "1.1.5", "tslint": "4.5.1", "tslint-loader": "3.5.2", "typescript": "2.2.2", "webpack": "2.3.3", "webpack-dev-server": "2.4.2", "webpack-merge": "4.1.0", "webpack-notifier": "1.5.0", "webpack-visualizer-plugin": "0.1.11", "write-file-webpack-plugin": "3.4.2", "xml2js": "0.4.17", "sass-loader": "5.0.1", "node-sass": "4.5.0", "postcss-loader": "1.3.0", "yargs": "6.6.0" }, "engines": { "node": ">=6.9.0" }, "scripts": { "lint": "tslint 'src/main/webapp/app/**/*.ts' --force", "lint:fix": "tslint 'src/main/webapp/app/**/*.ts' --fix --force", "tsc": "tsc", "tsc:w": "tsc -w", "ngc": "ngc -p tsconfig-aot.json", "cleanup": "rimraf target/", "start": "yarn run webpack:dev", "webpack:build": "yarn run ngc && webpack --config webpack/webpack.vendor.js && webpack --config webpack/webpack.dev.js", "webpack:build:dev": "webpack --config webpack/webpack.dev.js", "webpack:build:vendor": "webpack --config webpack/webpack.vendor.js", "webpack:dev": "webpack-dev-server --config webpack/webpack.dev.js --progress --inline --hot --profile --port=9060", "webpack:prod": "yarn run ngc && yarn run test && webpack -p --config webpack/webpack.vendor.js && webpack -p --config webpack/webpack.prod.js", "test": "yarn run lint && karma start src/test/javascript/karma.conf.js", "test:watch": "karma start --watch", "postinstall": "yarn run webpack:build" } }

and this is what the error shows

yarn install v0.19.1 [1/4] Resolving packages... [2/4] Fetching packages... warning fsevents@1.1.3: The platform "win32" is incompatible with this module. info "fsevents@1.1.3" is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... thnks 4 help

craxal commented 4 years ago

Was this properly resolved? I'm interested in switching my team's process to yarn, but I'm running into similar issues here.

I'm attempting to setup workspaces, because we have a monrepo setup, and the source registry is a private registry in Azure DevOps. The problematic package is our own native node module in the workspace (it has "os": [ "darwin" ] in the package.json). We have another workspace package that optionally includes it ("optionalDependencies": { "our-native-package": "1.0.0" }). Yarn fails to install with an error saying our-native-package is incompatible.

ingles98 commented 3 years ago

Was this ever fixed? I'm having this issue right now in 2021.