Skip to content
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

Better handling of nested executable script #760

Closed
jourdain opened this issue Oct 11, 2016 · 20 comments
Closed

Better handling of nested executable script #760

jourdain opened this issue Oct 11, 2016 · 20 comments

Comments

@jourdain
Copy link

jourdain commented Oct 11, 2016

Do you want to request a feature or report a bug?

feature/bug

What is the current behavior?

Let's pretend your project "A" has a dependency on "B" and "B" has a dependency on "Webpack", "ESlint" and more CLI...

Those CLI will be stored inside {A}/node_modules/B/node_modules/.bin/* which will prevent any CLI from working within project "A".

It will be nice to have B CLI's available in A, like npm 3+ do.

I see several options:

  1. Gather any nested CLI to the root ./node_modules/.bin
  2. Gather only global package to the root
  3. Add metadata inside package.json for project like B that act as meta-packages.

If the current behavior is a bug, please provide the steps to reproduce.

$ mkdir tmp
$ cd tmp/
$ yarn init
$ yarn add kw-web-suite
$ ls node_modules/.bin/
  fix-kw-web-suite
$ ls node_modules/kw-web-suite/node_modules/.bin/
  commitizen  eslint  git-cz  semantic-release  shjs  webpack  webpack-dev-server

What is the expected behavior?

I would expect to see node_modules/kw-web-suite/node_modules/.bin/ inside node_modules/.bin/

Please mention your node.js, yarn and operating system version.

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1004
$ node --version
v6.3.1
$ yarn --version
0.15.1
@DanielZlotin
Copy link

I would like to add that for me, using 0.15.1 on node 6.7.0, OSX El capitan:
when installing regular open source projects from npmjs, yarn installs node_modules/.bin.
The issue occurs only when installing from private repositories, then yarn doesn't event create the .bin folder at all, although the rest of node_modules looks fine.

@DanielZlotin
Copy link

In the mean time I'm using this gist to just mimic what npm usually does with all executables under node_modules (symlinks them into node_modules/.bin): https://gist.github.com/DanielZlotin/4199f3dd85d1b952117ea260a99fdb72

@jourdain
Copy link
Author

nice! Thanks for sharing

@DanielZlotin
Copy link

DanielZlotin commented Oct 18, 2016

OK so further testing reveals the problem to be completely different: this has nothing to do with private repositories and can be reproduced using npmjs.
This only happens to inner dependencies.

For example: if you have in your dependencies eslint, the resulting node_modules/.bin is:

eslint -> ../eslint/bin/eslint.js

But, if you remove everything from dependencies and put, say, standard, using yarn, you get only this single file under node_modules/.bin:

standard -> ../standard/bin/cmd.js

notice no eslint executable is present, even though standard brings eslint transitively.

To compare, here is the resulting install of a single dependency standard using npm 3:

drwxr-xr-x   12  361602828   408B Oct 18 20:19 .
drwxr-xr-x  146  361602828   4.8K Oct 18 20:19 ..
lrwxr-xr-x    1  361602828    18B Oct 18 20:19 acorn -> ../acorn/bin/acorn
lrwxr-xr-x    1  361602828    23B Oct 18 20:19 eslint -> ../eslint/bin/eslint.js
lrwxr-xr-x    1  361602828    25B Oct 18 20:19 esparse -> ../esprima/bin/esparse.js
lrwxr-xr-x    1  361602828    28B Oct 18 20:19 esvalidate -> ../esprima/bin/esvalidate.js
lrwxr-xr-x    1  361602828    25B Oct 18 20:19 js-yaml -> ../js-yaml/bin/js-yaml.js
lrwxr-xr-x    1  361602828    20B Oct 18 20:19 mkdirp -> ../mkdirp/bin/cmd.js
lrwxr-xr-x    1  361602828    16B Oct 18 20:19 rimraf -> ../rimraf/bin.js
lrwxr-xr-x    1  361602828    19B Oct 18 20:19 shjs -> ../shelljs/bin/shjs
lrwxr-xr-x    1  361602828    22B Oct 18 20:19 standard -> ../standard/bin/cmd.js
lrwxr-xr-x    1  361602828    29B Oct 18 20:19 strip-json-comments -> ../strip-json-comments/cli.js

As you can see, every transitive dependency which has an executable defined under package.json bin is getting linked in the top-most node_modules/.bin folder.

@DanielZlotin
Copy link

DanielZlotin commented Oct 18, 2016

Something to do with this commit maybe? 986938e?diff=unified#diff-163b16ac3f2b452cccb80bff414a566cL167

@jkimbo
Copy link
Contributor

jkimbo commented Oct 18, 2016

@DanielZlotin you were right about that commit! I've created a PR that should fix this issue: #1210

@DanielZlotin
Copy link

Just wanted to share this https://github.com/wix/yarn-bin-fix. This is a temporary fix to our migration pains.

@sebmck
Copy link
Contributor

sebmck commented Nov 3, 2016

Fixed via #1210.

@sebmck sebmck closed this as completed Nov 3, 2016
@jourdain
Copy link
Author

jourdain commented Nov 3, 2016

Still not fix with yarn@0.16.1.

$ mkdir tmp
$ cd tmp/
$ yarn add kw-web-suite
yarn add v0.16.1
info No lockfile found.
[1/4] 🔍  Resolving packages...
warning kw-web-suite > semantic-release > npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
warning kw-web-suite > commitizen > find-node-modules > findup-sync > glob > minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
warning kw-web-suite > semantic-release > @semantic-release/commit-analyzer > conventional-changelog@0.0.17: Please update conventional-changelog to >1.0.0. If you are running the cli, use conventional-changelog-cli
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 📃  Building fresh packages...
success Saved lockfile.
success Saved 866 new dependencies.
├─ @semantic-release/commit-analyzer@2.0.0
├─ @semantic-release/condition-travis@4.1.4
├─ @semantic-release/error@1.0.0
├─ @semantic-release/last-release-npm@1.2.1
├─ @semantic-release/release-notes-generator@2.0.0
├─ abbrev@1.0.9
├─ accepts@1.3.3
├─ acorn-jsx@3.0.1
├─ acorn@3.3.0
├─ ajv-keywords@1.1.1
├─ ajv@4.8.2
├─ align-text@0.1.4
├─ alphanum-sort@1.0.2
├─ amdefine@1.0.1
├─ ansi-escapes@1.4.0
├─ ansi-regex@2.0.0
├─ ansi-styles@2.2.1
├─ ansi@0.3.1
├─ anymatch@1.3.0
├─ aproba@1.0.4
├─ are-we-there-yet@1.0.6
├─ argparse@1.0.9
├─ arr-diff@2.0.0
├─ arr-flatten@1.0.1
├─ array-find-index@1.0.2
├─ array-find@1.0.0
├─ array-flatten@1.1.1
├─ array-union@1.0.2
├─ array-uniq@1.0.3
├─ array-unique@0.2.1
├─ arrify@1.0.1
├─ asap@2.0.5
├─ asn1.js@4.8.1
├─ asn1@0.2.3
├─ assert-plus@0.2.0
├─ assert@1.4.1
├─ ast-types@0.9.0
├─ async-each@1.0.1
├─ async@1.5.2
├─ asynckit@0.4.0
├─ autoprefixer@6.5.0
├─ aws-sign2@0.6.0
├─ aws4@1.5.0
├─ babel-code-frame@6.16.0
├─ babel-core@6.17.0
│  └─ lodash@4.16.6
├─ babel-eslint@7.0.0
├─ babel-generator@6.18.0
│  └─ lodash@4.16.6
├─ babel-helper-builder-react-jsx@6.18.0
│  └─ lodash@4.16.6
├─ babel-helper-call-delegate@6.18.0
├─ babel-helper-define-map@6.18.0
│  └─ lodash@4.16.6
├─ babel-helper-function-name@6.18.0
├─ babel-helper-get-function-arity@6.18.0
├─ babel-helper-hoist-variables@6.18.0
├─ babel-helper-optimise-call-expression@6.18.0
├─ babel-helper-regex@6.18.0
│  └─ lodash@4.16.6
├─ babel-helper-replace-supers@6.18.0
├─ babel-helpers@6.16.0
├─ babel-loader@6.2.5
├─ babel-messages@6.8.0
├─ babel-plugin-check-es2015-constants@6.8.0
├─ babel-plugin-syntax-flow@6.18.0
├─ babel-plugin-syntax-jsx@6.18.0
├─ babel-plugin-transform-es2015-arrow-functions@6.8.0
├─ babel-plugin-transform-es2015-block-scoped-functions@6.8.0
├─ babel-plugin-transform-es2015-block-scoping@6.18.0
│  └─ lodash@4.16.6
├─ babel-plugin-transform-es2015-classes@6.18.0
├─ babel-plugin-transform-es2015-computed-properties@6.8.0
├─ babel-plugin-transform-es2015-destructuring@6.18.0
├─ babel-plugin-transform-es2015-duplicate-keys@6.8.0
├─ babel-plugin-transform-es2015-for-of@6.18.0
├─ babel-plugin-transform-es2015-function-name@6.9.0
├─ babel-plugin-transform-es2015-literals@6.8.0
├─ babel-plugin-transform-es2015-modules-amd@6.18.0
├─ babel-plugin-transform-es2015-modules-commonjs@6.18.0
├─ babel-plugin-transform-es2015-modules-systemjs@6.18.0
├─ babel-plugin-transform-es2015-modules-umd@6.18.0
├─ babel-plugin-transform-es2015-object-super@6.8.0
├─ babel-plugin-transform-es2015-parameters@6.18.0
├─ babel-plugin-transform-es2015-shorthand-properties@6.18.0
├─ babel-plugin-transform-es2015-spread@6.8.0
├─ babel-plugin-transform-es2015-sticky-regex@6.8.0
├─ babel-plugin-transform-es2015-template-literals@6.8.0
├─ babel-plugin-transform-es2015-typeof-symbol@6.18.0
├─ babel-plugin-transform-es2015-unicode-regex@6.11.0
│  └─ regexpu-core@2.0.0
├─ babel-plugin-transform-flow-strip-types@6.18.0
├─ babel-plugin-transform-react-display-name@6.8.0
├─ babel-plugin-transform-react-jsx-self@6.11.0
├─ babel-plugin-transform-react-jsx-source@6.9.0
├─ babel-plugin-transform-react-jsx@6.8.0
├─ babel-plugin-transform-regenerator@6.16.1
├─ babel-plugin-transform-strict-mode@6.18.0
├─ babel-polyfill@6.16.0
├─ babel-preset-es2015@6.16.0
├─ babel-preset-react@6.16.0
├─ babel-register@6.18.0
│  ├─ babel-core@6.18.2
│  ├─ json5@0.5.0
│  └─ lodash@4.16.6
├─ babel-runtime@6.18.0
├─ babel-template@6.16.0
│  └─ lodash@4.16.6
├─ babel-traverse@6.18.0
│  └─ lodash@4.16.6
├─ babel-types@6.18.0
│  └─ lodash@4.16.6
├─ babylon@6.13.1
├─ balanced-match@0.4.2
├─ base64-js@1.2.0
├─ Base64@0.2.1
├─ batch@0.5.3
├─ bcrypt-pbkdf@1.0.0
├─ big.js@3.1.3
├─ binary-extensions@1.7.0
├─ block-stream@0.0.9
├─ bluebird@3.4.6
├─ bn.js@4.11.6
├─ boolbase@1.0.0
├─ boom@2.10.1
├─ brace-expansion@1.1.6
├─ braces@1.8.5
├─ brorand@1.0.6
├─ browserify-aes@1.0.6
├─ browserify-cipher@1.0.0
├─ browserify-des@1.0.0
├─ browserify-rsa@4.0.1
├─ browserify-sign@4.0.0
├─ browserify-zlib@0.1.4
├─ browserslist@1.4.0
├─ buffer-shims@1.0.0
├─ buffer-xor@1.0.3
├─ buffer@4.9.1
├─ builtin-modules@1.1.1
├─ bytes@2.3.0
├─ caller-path@0.1.0
├─ callsites@0.2.0
├─ camel-case@3.0.0
├─ camelcase-keys@2.1.0
│  └─ camelcase@2.1.1
├─ camelcase@1.2.1
├─ caniuse-db@1.0.30000574
├─ caseless@0.11.0
├─ center-align@0.1.3
├─ chalk@1.1.3
│  └─ supports-color@2.0.0
├─ change-case@3.0.0
├─ cheerio@0.19.0
├─ chokidar@1.6.1
│  └─ is-glob@2.0.1
├─ cipher-base@1.0.3
├─ circular-json@0.3.1
├─ clap@1.1.1
├─ clean-css@3.4.20
│  ├─ commander@2.8.1
│  └─ source-map@0.4.4
├─ cli-cursor@1.0.2
├─ cli-width@2.1.0
├─ cliui@2.1.0
│  └─ wordwrap@0.0.2
├─ clone@1.0.2
├─ co@4.6.0
├─ coa@1.0.1
├─ code-point-at@1.1.0
├─ color-convert@1.6.0
├─ color-name@1.1.1
├─ color-string@0.3.0
├─ color@0.11.4
├─ colormin@1.1.2
├─ colors@1.1.2
├─ combined-stream@1.0.5
├─ commander@2.9.0
├─ commitizen@2.8.6
│  ├─ find-root@1.0.0
│  ├─ glob@7.0.5
│  ├─ inquirer@1.1.2
│  │  └─ lodash@4.16.6
│  ├─ lodash@4.15.0
│  ├─ path-exists@2.1.0
│  ├─ run-async@2.2.0
│  ├─ shelljs@0.5.3
│  └─ strip-json-comments@2.0.1
├─ commondir@1.0.1
├─ compressible@2.0.9
├─ compression@1.6.2
├─ concat-map@0.0.1
├─ concat-stream@1.5.2
│  └─ readable-stream@2.0.6
├─ config-chain@1.1.11
├─ connect-history-api-fallback@1.3.0
├─ console-browserify@1.1.0
├─ console-control-strings@1.1.0
├─ constant-case@2.0.0
├─ constants-browserify@1.0.0
├─ contains-path@0.1.0
├─ content-disposition@0.5.1
├─ content-type@1.0.2
├─ conventional-changelog@0.0.17
├─ conventional-commit-types@2.1.0
├─ convert-source-map@1.3.0
├─ cookie-signature@1.0.6
├─ cookie@0.3.1
├─ core-js@2.4.1
├─ core-util-is@1.0.2
├─ create-ecdh@4.0.0
├─ create-hash@1.1.2
├─ create-hmac@1.1.4
├─ cryptiles@2.0.5
├─ crypto-browserify@3.11.0
├─ css-color-names@0.0.4
├─ css-loader@0.25.0
├─ css-select@1.0.0
├─ css-selector-tokenizer@0.6.0
├─ css-what@1.0.0
├─ cssesc@0.1.0
├─ cssnano@3.8.0
│  └─ autoprefixer@6.5.1
├─ csso@2.2.1
├─ currently-unhandled@0.4.1
├─ cz-conventional-changelog@1.2.0
├─ d@0.1.1
├─ damerau-levenshtein@1.0.3
├─ dashdash@1.14.0
│  └─ assert-plus@1.0.0
├─ date-now@0.1.4
├─ dateformat@1.0.12
├─ debug@2.2.0
├─ decamelize@1.2.0
├─ dedent@0.6.0
├─ deep-extend@0.4.1
├─ deep-is@0.1.3
├─ defined@1.0.0
├─ del@2.2.2
├─ delayed-stream@1.0.0
├─ delegates@1.0.0
├─ depd@1.1.0
├─ des.js@1.0.0
├─ destroy@1.0.4
├─ detect-indent@4.0.0
├─ dezalgo@1.0.3
├─ diffie-hellman@5.0.2
├─ doctrine@1.5.0
├─ dom-converter@0.1.4
│  └─ utila@0.3.3
├─ dom-serializer@0.1.0
├─ domain-browser@1.1.7
├─ domelementtype@1.1.3
├─ domhandler@2.3.0
│  └─ domelementtype@1.3.0
├─ domutils@1.4.3
│  └─ domelementtype@1.3.0
├─ dot-case@2.1.0
├─ duplexer@0.1.1
├─ ecc-jsbn@0.1.1
├─ ee-first@1.1.1
├─ elliptic@6.3.2
├─ emojis-list@2.1.0
├─ encodeurl@1.0.1
├─ enhanced-resolve@0.9.1
│  └─ memory-fs@0.2.0
├─ entities@1.1.1
├─ errno@0.1.4
├─ error-ex@1.3.0
├─ es5-ext@0.10.12
├─ es6-iterator@2.0.0
├─ es6-map@0.1.4
├─ es6-set@0.1.4
├─ es6-symbol@3.1.0
├─ es6-templates@0.2.3
├─ es6-weak-map@2.0.1
├─ escape-html@1.0.3
├─ escape-string-regexp@1.0.5
├─ escope@3.6.0
├─ eslint-config-airbnb-base@8.0.0
├─ eslint-config-airbnb@12.0.0
├─ eslint-import-resolver-node@0.2.3
├─ eslint-import-resolver-webpack@0.6.0
│  └─ interpret@1.0.1
├─ eslint-loader@1.5.0
├─ eslint-plugin-import@1.16.0
│  └─ doctrine@1.3.0
├─ eslint-plugin-jsx-a11y@2.2.2
├─ eslint-plugin-react@6.3.0
├─ eslint@3.7.1
│  ├─ lodash@4.16.6
│  └─ shelljs@0.6.1
├─ espree@3.3.2
│  └─ acorn@4.0.3
├─ esprima@2.7.3
├─ esrecurse@4.1.0
│  └─ estraverse@4.1.1
├─ estraverse@4.2.0
├─ esutils@2.0.2
├─ etag@1.7.0
├─ event-emitter@0.3.4
├─ event-stream@3.3.4
├─ eventemitter3@1.2.0
├─ events@1.1.1
├─ eventsource@0.1.6
├─ evp_bytestokey@1.0.0
├─ exit-hook@1.1.1
├─ expand-brackets@0.1.5
├─ expand-range@1.8.2
├─ expose-loader@0.7.1
├─ express@4.14.0
├─ extend@3.0.0
├─ external-editor@1.1.1
├─ extglob@0.3.2
├─ extsprintf@1.0.2
├─ fast-levenshtein@2.0.5
├─ fastparse@1.1.1
├─ faye-websocket@0.10.0
├─ figures@1.7.0
├─ file-entry-cache@2.0.0
├─ file-loader@0.9.0
├─ filename-regex@2.0.0
├─ fill-range@2.2.3
├─ finalhandler@0.5.0
├─ find-cache-dir@0.1.1
├─ find-node-modules@1.0.3
├─ find-root@0.1.2
├─ find-up@1.1.2
│  └─ path-exists@2.1.0
├─ findup-sync@0.2.1
│  ├─ glob@4.3.5
│  └─ minimatch@2.0.10
├─ flat-cache@1.2.1
├─ flatten@1.0.2
├─ for-in@0.1.6
├─ for-own@0.1.4
├─ foreachasync@3.0.0
├─ forever-agent@0.6.1
├─ form-data@2.1.1
├─ forwarded@0.1.0
├─ fresh@0.3.0
├─ from@0.1.3
├─ fs.realpath@1.0.0
├─ fsevents@1.0.15
├─ fstream-ignore@1.0.5
├─ fstream@1.0.10
├─ function-bind@1.1.0
├─ gauge@1.2.7
├─ generate-function@2.0.0
├─ generate-object-property@1.2.0
├─ get-stdin@4.0.1
├─ getpass@0.1.6
│  └─ assert-plus@1.0.0
├─ git-head@1.15.0
├─ git-refs@1.1.3
├─ github-url-from-git@1.4.0
├─ github-url-from-username-repo@1.0.2
├─ github@0.2.4
│  └─ mime@1.3.4
├─ glob-base@0.3.0
│  └─ is-glob@2.0.1
├─ glob-parent@2.0.0
│  └─ is-glob@2.0.1
├─ glob@7.1.1
├─ globals@9.12.0
├─ globby@5.0.0
├─ graceful-fs@4.1.10
├─ graceful-readlink@1.0.1
├─ har-validator@2.0.6
├─ has-ansi@2.0.0
├─ has-color@0.1.7
├─ has-flag@1.0.0
├─ has-unicode@2.0.1
├─ has@1.0.1
├─ hash.js@1.0.3
├─ hawk@3.1.3
├─ he@1.1.0
├─ header-case@1.0.0
├─ hoek@2.16.3
├─ home-or-tmp@2.0.0
├─ hosted-git-info@2.1.5
├─ html-comment-regex@1.1.1
├─ html-loader@0.4.4
│  ├─ async@0.2.10
│  ├─ html-minifier@3.1.0
│  └─ uglify-js@2.7.4
├─ html-minifier@2.1.7
├─ html-webpack-plugin@2.22.0
│  └─ lodash@4.16.6
├─ htmlparser2@3.8.3
│  ├─ domelementtype@1.3.0
│  ├─ domutils@1.5.1
│  ├─ entities@1.0.0
│  ├─ isarray@0.0.1
│  └─ readable-stream@1.1.13
├─ http-browserify@1.7.0
├─ http-errors@1.5.0
│  └─ inherits@2.0.1
├─ http-proxy-middleware@0.17.2
│  └─ lodash@4.16.6
├─ http-proxy@1.15.2
├─ http-signature@1.1.1
├─ https-browserify@0.0.1
├─ icss-replace-symbols@1.0.2
├─ ieee754@1.1.8
├─ ignore@3.2.0
├─ image-size@0.3.5
├─ imurmurhash@0.1.4
├─ indent-string@2.1.0
├─ indexes-of@1.0.1
├─ indexof@0.0.1
├─ inflight@1.0.6
├─ inherits@2.0.3
├─ ini@1.3.4
├─ inquirer@0.12.0
│  └─ lodash@4.16.6
├─ interpret@0.6.6
├─ invariant@2.2.1
├─ ipaddr.js@1.1.1
├─ is-absolute-url@2.0.0
├─ is-absolute@0.2.6
├─ is-arrayish@0.2.1
├─ is-binary-path@1.0.1
├─ is-buffer@1.1.4
├─ is-builtin-module@1.0.0
├─ is-dotfile@1.0.2
├─ is-equal-shallow@0.1.3
├─ is-extendable@0.1.1
├─ is-extglob@1.0.0
├─ is-finite@1.0.2
├─ is-fullwidth-code-point@1.0.0
├─ is-glob@3.1.0
│  └─ is-extglob@2.1.0
├─ is-lower-case@1.1.3
├─ is-my-json-valid@2.15.0
├─ is-number@2.1.0
├─ is-path-cwd@1.0.0
├─ is-path-in-cwd@1.0.0
├─ is-path-inside@1.0.0
├─ is-plain-obj@1.1.0
├─ is-posix-bracket@0.1.1
├─ is-primitive@2.0.0
├─ is-promise@2.1.0
├─ is-property@1.0.2
├─ is-relative@0.2.1
├─ is-resolvable@1.0.0
├─ is-svg@2.0.1
├─ is-typedarray@1.0.0
├─ is-unc-path@0.1.1
├─ is-upper-case@1.1.2
├─ is-utf8@0.2.1
├─ is-windows@0.2.0
├─ isarray@1.0.0
├─ isobject@2.1.0
├─ isstream@0.1.2
├─ jodid25519@1.0.2
├─ js-base64@2.1.9
├─ js-tokens@2.0.0
├─ js-yaml@3.6.1
├─ jsbn@0.1.0
├─ jsesc@1.3.0
├─ json-loader@0.5.4
├─ json-schema@0.2.3
├─ json-stable-stringify@1.0.1
├─ json-stringify-safe@5.0.1
├─ json3@3.3.2
├─ json5@0.4.0
├─ jsonify@0.0.0
├─ jsonpointer@4.0.0
├─ jsprim@1.3.1
├─ jsx-ast-utils@1.3.3
├─ kind-of@3.0.4
├─ kw-web-suite@2.2.1
├─ lazy-cache@1.0.4
├─ levn@0.3.0
├─ load-json-file@1.1.0
│  └─ strip-bom@2.0.0
├─ loader-utils@0.2.16
│  └─ json5@0.5.0
├─ lodash._baseassign@3.2.0
├─ lodash._basecopy@3.0.1
├─ lodash._baseget@3.7.2
├─ lodash._bindcallback@3.0.1
├─ lodash._createassigner@3.1.1
├─ lodash._createcompounder@3.0.0
├─ lodash._getnative@3.9.1
├─ lodash._isiterateecall@3.0.9
├─ lodash._root@3.0.1
├─ lodash._topath@3.8.1
├─ lodash.assign@3.2.0
├─ lodash.camelcase@3.0.1
├─ lodash.cond@4.5.2
├─ lodash.deburr@3.2.0
├─ lodash.endswith@4.2.1
├─ lodash.find@4.6.0
├─ lodash.findindex@4.6.0
├─ lodash.get@3.7.0
├─ lodash.indexof@4.0.5
├─ lodash.isarguments@3.1.0
├─ lodash.isarray@3.0.4
├─ lodash.keys@3.1.2
├─ lodash.map@4.6.0
├─ lodash.pad@4.5.1
├─ lodash.padend@4.6.1
├─ lodash.padstart@4.6.1
├─ lodash.pickby@4.6.0
├─ lodash.restparam@3.6.1
├─ lodash.words@3.2.0
├─ lodash@3.10.1
├─ longest@1.0.1
├─ loose-envify@1.3.0
├─ loud-rejection@1.6.0
├─ lower-case-first@1.0.2
├─ lower-case@1.1.3
├─ macaddress@0.2.8
├─ map-obj@1.0.1
├─ map-stream@0.1.0
├─ math-expression-evaluator@1.2.14
├─ media-typer@0.3.0
├─ memory-fs@0.3.0
├─ meow@3.7.0
│  └─ normalize-package-data@2.3.5
├─ merge-descriptors@1.0.1
├─ merge@1.2.0
├─ methods@1.1.2
├─ micromatch@2.3.11
│  └─ is-glob@2.0.1
├─ miller-rabin@4.0.0
├─ mime-db@1.24.0
├─ mime-types@2.1.12
├─ mime@1.2.11
├─ minimalistic-assert@1.0.0
├─ minimatch@3.0.3
├─ minimist@1.2.0
├─ mkdirp@0.5.1
│  └─ minimist@0.0.8
├─ ms@0.7.1
├─ mute-stream@0.0.6
├─ nan@2.4.0
├─ natural-compare@1.4.0
├─ ncname@1.0.0
├─ negotiator@0.6.1
├─ nerf-dart@1.0.0
├─ no-case@2.3.0
├─ node-libs-browser@1.0.0
├─ node-pre-gyp@0.6.31
│  ├─ are-we-there-yet@1.1.2
│  ├─ gauge@2.6.0
│  └─ npmlog@4.0.0
├─ node-uuid@1.4.7
├─ nopt@3.0.6
├─ normalize-package-data@1.0.3
│  └─ semver@4.3.6
├─ normalize-path@2.0.1
├─ normalize-range@0.1.2
├─ normalize-url@1.7.0
├─ npm-package-arg@4.2.0
├─ npm-registry-client@7.3.0
│  ├─ are-we-there-yet@1.1.2
│  ├─ gauge@2.6.0
│  ├─ normalize-package-data@2.3.5
│  └─ npmlog@3.1.2
├─ npmconf@2.1.2
│  ├─ once@1.3.3
│  └─ semver@4.3.6
├─ npmlog@1.2.1
├─ nth-check@1.0.1
├─ num2fraction@1.2.2
├─ number-is-nan@1.0.1
├─ oauth-sign@0.8.2
├─ object-assign@4.1.0
├─ object.omit@2.0.1
├─ on-finished@2.3.0
├─ on-headers@1.0.1
├─ once@1.4.0
├─ onetime@1.1.0
├─ open@0.0.5
├─ optimist@0.6.1
│  └─ minimist@0.0.10
├─ optionator@0.8.2
│  └─ wordwrap@1.0.0
├─ original@1.0.0
│  └─ url-parse@1.0.5
├─ os-browserify@0.2.1
├─ os-homedir@1.0.2
├─ os-shim@0.1.3
├─ os-tmpdir@1.0.2
├─ osenv@0.1.3
├─ pad-right@0.2.2
├─ pako@0.2.9
├─ param-case@2.1.0
├─ parse-asn1@5.0.0
├─ parse-github-repo-url@1.3.0
├─ parse-glob@3.0.4
│  └─ is-glob@2.0.1
├─ parse-json@2.2.0
├─ parseurl@1.3.1
├─ pascal-case@2.0.0
├─ path-browserify@0.0.0
├─ path-case@2.1.0
├─ path-exists@1.0.0
├─ path-is-absolute@1.0.1
├─ path-is-inside@1.0.2
├─ path-object@2.3.0
├─ path-to-regexp@0.1.7
├─ path-type@1.1.0
├─ pause-stream@0.0.11
├─ pbkdf2-compat@2.0.1
├─ pbkdf2@3.0.9
├─ pify@2.3.0
├─ pinkie-promise@2.0.1
├─ pinkie@2.0.4
├─ pkg-dir@1.0.0
├─ pkg-up@1.0.0
├─ pluralize@1.2.1
├─ postcss-calc@5.3.1
├─ postcss-colormin@2.2.1
├─ postcss-convert-values@2.4.1
├─ postcss-discard-comments@2.0.4
├─ postcss-discard-duplicates@2.0.1
├─ postcss-discard-empty@2.1.0
├─ postcss-discard-overridden@0.1.1
├─ postcss-discard-unused@2.2.2
├─ postcss-filter-plugins@2.0.2
├─ postcss-loader@0.13.0
├─ postcss-merge-idents@2.1.7
├─ postcss-merge-longhand@2.0.1
├─ postcss-merge-rules@2.0.10
├─ postcss-message-helpers@2.0.0
├─ postcss-minify-font-values@1.0.5
├─ postcss-minify-gradients@1.0.5
├─ postcss-minify-params@1.0.5
├─ postcss-minify-selectors@2.0.5
├─ postcss-modules-extract-imports@1.0.1
├─ postcss-modules-local-by-default@1.1.1
├─ postcss-modules-scope@1.0.2
├─ postcss-modules-values@1.2.2
├─ postcss-normalize-charset@1.1.0
├─ postcss-normalize-url@3.0.7
├─ postcss-ordered-values@2.2.2
├─ postcss-reduce-idents@2.3.1
├─ postcss-reduce-initial@1.0.0
├─ postcss-reduce-transforms@1.0.4
├─ postcss-selector-parser@2.2.1
├─ postcss-svgo@2.1.5
├─ postcss-unique-selectors@2.0.2
├─ postcss-value-parser@3.3.0
├─ postcss-zindex@2.1.1
├─ postcss@5.2.5
├─ prelude-ls@1.1.2
├─ prepend-http@1.0.4
├─ preserve@0.2.0
├─ pretty-error@2.0.2
├─ private@0.1.6
├─ process-nextick-args@1.0.7
├─ process@0.11.9
├─ progress@1.1.8
├─ proto-list@1.2.4
├─ proxy-addr@1.1.2
├─ prr@0.0.0
├─ public-encrypt@4.0.0
├─ punycode@1.4.1
├─ q@1.4.1
├─ qs@6.2.0
├─ query-string@4.2.3
├─ querystring-es3@0.2.1
├─ querystring@0.2.0
├─ querystringify@0.0.4
├─ randomatic@1.1.5
├─ randombytes@2.0.3
├─ range-parser@1.2.0
├─ rc@1.1.6
├─ read-pkg-up@1.0.1
├─ read-pkg@1.1.0
│  └─ normalize-package-data@2.3.5
├─ readable-stream@2.1.5
├─ readdirp@2.1.0
├─ readline2@1.0.1
│  └─ mute-stream@0.0.5
├─ recast@0.11.15
│  └─ esprima@3.1.1
├─ rechoir@0.6.2
├─ redent@1.0.0
├─ reduce-css-calc@1.3.0
├─ reduce-function-call@1.0.1
│  └─ balanced-match@0.1.0
├─ regenerate@1.3.1
├─ regenerator-runtime@0.9.5
├─ regex-cache@0.4.3
├─ regexpu-core@1.0.0
├─ regjsgen@0.2.0
├─ regjsparser@0.1.5
│  └─ jsesc@0.5.0
├─ relateurl@0.2.7
├─ renderkid@2.0.0
│  ├─ css-select@1.2.0
│  │  └─ domutils@1.5.1
│  ├─ css-what@2.1.0
│  ├─ domelementtype@1.3.0
│  ├─ domhandler@2.1.0
│  ├─ domutils@1.1.6
│  ├─ htmlparser2@3.3.0
│  ├─ isarray@0.0.1
│  ├─ readable-stream@1.0.34
│  └─ utila@0.3.3
├─ repeat-element@1.1.2
├─ repeat-string@1.6.1
├─ repeating@2.0.1
├─ request@2.77.0
│  └─ qs@6.3.0
├─ require-relative@0.8.7
├─ require-uncached@1.0.2
├─ requires-port@1.0.0
├─ resolve-from@1.0.1
├─ resolve@1.1.7
├─ restore-cursor@1.0.1
├─ retry@0.10.0
├─ right-align@0.1.3
├─ right-pad@1.0.1
├─ rimraf@2.5.4
├─ ripemd160@1.0.1
├─ run-async@0.1.0
├─ run-auto@1.1.3
├─ run-series@1.1.4
├─ rx-lite@3.1.2
├─ rx@4.1.0
├─ sax@1.2.1
├─ semantic-release@4.3.5
├─ semver@5.3.0
├─ send@0.14.1
│  └─ mime@1.3.4
├─ sentence-case@2.1.0
├─ serve-index@1.8.0
├─ serve-static@1.11.1
├─ set-blocking@2.0.0
├─ set-immediate-shim@1.0.1
├─ setprototypeof@1.0.1
├─ sha.js@2.4.5
├─ shader-loader@1.3.0
├─ shebang-regex@1.0.0
├─ shelljs@0.7.4
│  └─ interpret@1.0.1
├─ signal-exit@3.0.1
├─ slash@1.0.0
├─ slice-ansi@0.0.4
├─ slide@1.1.6
├─ snake-case@2.1.0
├─ sniffr@1.1.4
├─ sntp@1.0.9
├─ sockjs-client@1.1.1
│  └─ faye-websocket@0.11.0
├─ sockjs@0.3.18
├─ sort-keys@1.1.2
├─ source-list-map@0.1.6
├─ source-map-support@0.4.6
├─ source-map@0.5.6
├─ spawn-sync@1.0.15
├─ spdx-correct@1.0.2
├─ spdx-expression-parse@1.0.4
├─ spdx-license-ids@1.2.2
├─ split@0.3.3
├─ sprintf-js@1.0.3
├─ sshpk@1.10.1
│  └─ assert-plus@1.0.0
├─ statuses@1.3.0
├─ stream-browserify@2.0.1
├─ stream-cache@0.0.2
├─ stream-combiner@0.0.4
├─ strict-uri-encode@1.1.0
├─ string_decoder@0.10.31
├─ string-replace-loader@1.0.5
├─ string-width@1.0.2
├─ stringstream@0.0.5
├─ strip-ansi@3.0.1
├─ strip-bom@3.0.0
├─ strip-indent@1.0.1
├─ strip-json-comments@1.0.4
├─ style-loader@0.13.1
├─ supports-color@3.1.2
├─ svg-sprite-loader@0.0.29
├─ svgo@0.7.1
├─ swap-case@1.1.2
├─ table@3.8.3
│  ├─ is-fullwidth-code-point@2.0.0
│  ├─ lodash@4.16.6
│  └─ string-width@2.0.0
├─ tapable@0.1.10
├─ tar-pack@3.3.0
│  ├─ once@1.3.3
│  └─ uid-number@0.0.6
├─ tar@2.2.1
├─ text-table@0.2.0
├─ through@2.3.8
├─ timers-browserify@1.4.2
├─ title-case@2.1.0
├─ tmp@0.0.29
├─ to-fast-properties@1.0.2
├─ toposort@1.0.0
├─ tough-cookie@2.3.2
├─ trim-newlines@1.0.0
├─ tryit@1.0.3
├─ tty-browserify@0.0.0
├─ tunnel-agent@0.4.3
├─ tweetnacl@0.14.3
├─ type-check@0.3.2
├─ type-is@1.6.13
├─ typedarray@0.0.6
├─ uglify-js@2.6.4
│  └─ async@0.2.10
├─ uglify-to-browserify@1.0.2
├─ uid-number@0.0.5
├─ unc-path-regex@0.1.2
├─ uniq@1.0.1
├─ uniqid@4.1.0
├─ uniqs@2.0.0
├─ unpipe@1.0.0
├─ upper-case-first@1.1.2
├─ upper-case@1.1.3
├─ url-loader@0.5.7
├─ url-parse@1.1.7
├─ url@0.11.0
│  └─ punycode@1.3.2
├─ user-home@2.0.0
├─ util-deprecate@1.0.2
├─ util@0.10.3
│  └─ inherits@2.0.1
├─ utila@0.4.0
├─ utils-merge@1.0.0
├─ uuid@2.0.3
├─ validate-npm-package-license@3.0.1
├─ vary@1.1.0
├─ vendors@1.0.1
├─ verror@1.3.6
├─ vm-browserify@0.0.4
├─ walk@2.3.9
├─ watchpack@0.2.9
│  └─ async@0.9.2
├─ webpack-core@0.6.8
│  └─ source-map@0.4.4
├─ webpack-dev-middleware@1.8.4
│  └─ mime@1.3.4
├─ webpack-dev-server@1.16.2
├─ webpack@1.13.2
│  ├─ constants-browserify@0.0.1
│  ├─ crypto-browserify@3.2.8
│  ├─ https-browserify@0.0.0
│  ├─ isarray@0.0.1
│  ├─ node-libs-browser@0.6.0
│  ├─ os-browserify@0.1.2
│  ├─ readable-stream@1.1.14
│  ├─ ripemd160@0.2.0
│  ├─ sha.js@2.2.6
│  ├─ stream-browserify@1.0.0
│  └─ url@0.10.3
│  │  └─ punycode@1.3.2
├─ websocket-driver@0.6.5
├─ websocket-extensions@0.1.1
├─ whet.extend@0.9.9
├─ wide-align@1.1.0
├─ window-size@0.1.0
├─ word-wrap@1.1.0
├─ wordwrap@0.0.3
├─ wrappy@1.0.2
├─ write@0.2.1
├─ xml-char-classes@1.0.0
├─ xtend@4.0.1
└─ yargs@3.10.0
✨  Done in 15.29s.

$ ls node_modules/.bin/
fix-kw-web-suite

$ ls node_modules/kw-web-suite/node_modules/.bin/
commitizen      eslint          git-cz          semantic-release    shjs            webpack         webpack-dev-server

@wyze
Copy link
Member

wyze commented Nov 3, 2016

@jourdain The PR that fixed this just landed an hour ago and there hasn't been a release, so the current version is still going to be broken until a new release is cut.

@wyze wyze removed the needs triage label Nov 3, 2016
@jourdain
Copy link
Author

jourdain commented Nov 3, 2016

Sounds good, I wasn't sure when I should be able to test the new version. So I'm guessing yarn@0.16.2 ?

@bitfrost
Copy link

bitfrost commented Nov 21, 2016

#1220 was reverted. Shouldn't this issue be re-opened?
As of yarn 17.8 nested exes are not installing in the root ./node_modules/.bin

@jourdain
Copy link
Author

I've tried the steps to reproduce that bug with yarn@0.17.8 and I confirm that we still see the same behavior.

This should be reopen.

@wyze
Copy link
Member

wyze commented Nov 21, 2016

I'll reopen this since the PR was reverted.

@vogloblinsky
Copy link

Sorry but this bug is still present in last nightly-build : 0.19.0

Scenario for reproducing the bug :

The file node_modules/.bin/ngd is not present

The file node_modules/.bin/ngd is present

anp added a commit to expo/create-react-native-app that referenced this issue Jan 11, 2017
Supported:

* Initializing a new project.
* Starting a project (if logged in w/ Exponent credentials -- anon
  access to come), running on physical device
* Running a project in an iOS simulator
* Running tests on the template project (with npm, waiting on
  yarnpkg/yarn#760 for yarn test support)
dizel3d added a commit to dizel3d/compodoc-demo-todomvc-angular2 that referenced this issue Jan 31, 2017
I read your [comment](yarnpkg/yarn#760 (comment)).
I've changed package.json a little bit. Now, I think, it will work with Yarn as well.
@jesstelford
Copy link

There's an open (but possibly abandoned) PR for a new fix: #2053

@zyy7259
Copy link

zyy7259 commented Jun 24, 2017

Any progress on this issue? yarn@0.24.6 still have this problem.

@BYK
Copy link
Member

BYK commented Aug 24, 2017

@zyy7259 not AFAIK. Would you like to investigate with the latest version on master and submit a pull request? We'd assist you in the process if you're interested in submitting a PR.

@Tapppi
Copy link

Tapppi commented Aug 29, 2017

@BYK AFAIK this was actually fixed in #3310 back in may, and is working for me with v0.27.5, can this be closed?

@jourdain
Copy link
Author

jourdain commented Aug 29, 2017

Seems to be fine with me now, I would say you can close the issue. Thanks for taking care of it!

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.6
BuildVersion:	16G29
$ node --version
v8.0.0
$ yarn --version
0.27.5

benjamincharity added a commit to GetTerminus/terminus-ui that referenced this issue Aug 29, 2017
@BYK BYK closed this as completed Sep 5, 2017
mobiledev7 added a commit to mobiledev7/create-react-native-app that referenced this issue Dec 12, 2022
Supported:

* Initializing a new project.
* Starting a project (if logged in w/ Exponent credentials -- anon
  access to come), running on physical device
* Running a project in an iOS simulator
* Running tests on the template project (with npm, waiting on
  yarnpkg/yarn#760 for yarn test support)
brilliantsunlight1109 added a commit to brilliantsunlight1109/react-native-app that referenced this issue Oct 10, 2023
Supported:

* Initializing a new project.
* Starting a project (if logged in w/ Exponent credentials -- anon
  access to come), running on physical device
* Running a project in an iOS simulator
* Running tests on the template project (with npm, waiting on
  yarnpkg/yarn#760 for yarn test support)
GoldenDragon0710 added a commit to GoldenDragon0710/React-Native-initial-app that referenced this issue Nov 27, 2023
Supported:

* Initializing a new project.
* Starting a project (if logged in w/ Exponent credentials -- anon
  access to come), running on physical device
* Running a project in an iOS simulator
* Running tests on the template project (with npm, waiting on
  yarnpkg/yarn#760 for yarn test support)
dn102704 added a commit to dn102704/create-react-native-app that referenced this issue Jun 10, 2024
Supported:

* Initializing a new project.
* Starting a project (if logged in w/ Exponent credentials -- anon
  access to come), running on physical device
* Running a project in an iOS simulator
* Running tests on the template project (with npm, waiting on
  yarnpkg/yarn#760 for yarn test support)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests