5

When I run npm prune I get the following (verbose) error

npm info lifecycle elm@0.19.0-bugfix2~install: elm@0.19.0-bugfix2

       > elm@0.19.0-bugfix2 install node_modules/elm
       > binwrap-install

sh: 1: binwrap-install: not found
npm verb lifecycle elm@0.19.0-bugfix2~install: unsafe-perm in lifecycle true
npm verb lifecycle elm@0.19.0-bugfix2~install: PATH: /tmp/build/.heroku/node/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/tmp/build/apps/web/node_modules/elm/node_modules/.bin:/tmp/build/.heroku/node/bin:/tmp/build/.platform_tools:/tmp/build/.platform_tools/erlang/bin:/tmp/build/.platform_tools/elixir/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
npm verb lifecycle elm@0.19.0-bugfix2~install: CWD: node_modules/elm
npm info lifecycle elm@0.19.0-bugfix2~install: Failed to exec install script
npm timing action:install Completed in 79ms
npm verb unlock done using /app/.npm/_locks/staging-4628ace6b39e4e32.lock for /tmp/build/apps/web/node_modules/.staging
npm timing stage:rollbackFailedOptional Completed in 62ms
npm timing stage:runTopLevelLifecycles Completed in 6364ms
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm verb notsup SKIPPING OPTIONAL DEPENDENCY: Valid OS:    darwin
npm verb notsup SKIPPING OPTIONAL DEPENDENCY: Valid Arch:  any
npm verb notsup SKIPPING OPTIONAL DEPENDENCY: Actual OS:   linux
npm verb notsup SKIPPING OPTIONAL DEPENDENCY: Actual Arch: x64

npm verb stack Error: elm@0.19.0-bugfix2 install: `binwrap-install`
npm verb stack spawn ENOENT
npm verb stack     at ChildProcess.<anonymous> (/tmp/build/.heroku/node/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
npm verb stack     at ChildProcess.emit (events.js:182:13)
npm verb stack     at maybeClose (internal/child_process.js:961:16)
npm verb stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:5)
npm verb pkgid elm@0.19.0-bugfix2
npm verb cwd /tmp/build/apps/web
npm verb Linux 4.15.0-36-generic
npm verb argv "/tmp/build/.heroku/node/bin/node" "/tmp/build/.heroku/node/bin/npm" "prune" "--verbose"
npm verb node v10.7.0
npm verb npm  v6.1.0
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! elm@0.19.0-bugfix2 install: `binwrap-install`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the elm@0.19.0-bugfix2 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm verb exit [ 1, true ]
npm timing npm Completed in 6866ms

It can't find binwrap-install and I think it's because the PATH is incorrect. I verified that the binary exists here.

ls -l node_modules/.bin/binwrap-install
lrwxrwxrwx 1 js js 30 Nov  9 23:48 node_modules/.bin/binwrap-install -> ../binwrap/bin/binwrap-install

But, the PATH in the error output above does not include

node_modules/.bin

Instead it includes

node_modules/elm/node_modules/.bin

Higher up in the verbose logging, I saw this which might be relevant.

npm info linkStuff binwrap@0.2.0
npm verb linkBins [ { 'binwrap-install': 'bin/binwrap-install',
npm verb linkBins     'binwrap-prepare': 'bin/binwrap-prepare',
npm verb linkBins     'binwrap-test': 'bin/binwrap-test' },
npm verb linkBins   '/tmp/build/apps/web/node_modules/elm-format/node_modules/.bin',
npm verb linkBins   false ]
npm info linkStuff fstream@0.1.31
npm info linkStuff unzip@0.1.11
npm info linkStuff binwrap@0.1.4
npm verb linkBins [ { 'binwrap-install': 'bin/binwrap-install',
npm verb linkBins     'binwrap-test': 'bin/binwrap-test' },
npm verb linkBins   '/tmp/build/apps/web/node_modules/.bin',
npm verb linkBins   false ]

Is this expected behavior or is it a bug somewhere? Is there something I can do to make the PATH for npm prune include the node_modules/.bin folder?

Jesse Shieh
  • 4,660
  • 5
  • 34
  • 49
  • 1
    Can you give the output of "npm ls --prod=true" (https://docs.npmjs.com/cli/ls.html) – rjdkolb Apr 05 '19 at 06:15
  • This latest change to the Elm installer may help; it no longer relies on binwrap: https://github.com/elm/compiler/commit/a76c07fde858e84b6b95168442368ff51739cfc9 – neurodynamic May 12 '19 at 14:59

2 Answers2

1

Try switching to Elm 0.19.1.

I was having this same issue and now with Elm 0.19.1 it seems to have stopped happening. The latest npm installer no longer relies on binwrap, which I think may have been the issue.

neurodynamic
  • 4,294
  • 3
  • 28
  • 39
0

My initial command was:

$ sudo npm install elm -g

The log was:

npm ERR! elm@0.19.0-bugfix2 install: binwrap-install

I attempted to remove npm.

Then I took a drastic measure:

$ cd /usr/local/lib
$ sudo rm -R node_modules

Then:

$ sudo apt install npm

Then:

$ sudo apt install elm -g

I now have elm 0.19.0 installed.

Joey
  • 1,436
  • 2
  • 19
  • 33