即使脚本本身可以运行,所有npm脚本也会失败

时间:2019-02-16 17:42:36

标签: node.js npm npm-scripts

我尝试安装的任何NPM模块在npm-scripts上均失败,例如postinstall。 如果我以npm run postinstall的身份运行它也会失败。 我直接运行脚本安装后调用(IE node whatever.js),就可以了。不幸的是,这导致我无法安装任何使用npm-scripts的模块。

我创建了一个超级简单的程序包来显示问题。

{
  "name": "gahhh",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "postinstall": "node script.js"
  },
  "author": "",
  "license": "ISC"
}

script.js包含:

'use strict';

console.log('Hello?');

正在运行的输出:

C:\Workspace\testing>npm run postinstall

> gahhh@1.0.0 postinstall C:\Workspace\testing
> node script.js

npm ERR! file bash
npm ERR! path bash
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn bash
npm ERR! gahhh@1.0.0 postinstall: `node script.js`
npm ERR! spawn bash ENOENT

详细错误输出:

C:\Workspace\testing>npm run postinstall --verbose
npm info it worked if it ends with ok
npm verb cli [ 'C:\\Program Files\\nodejs\\node.exe',
npm verb cli   'C:\\Users\\USERNAME\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
npm verb cli   'run',
npm verb cli   'postinstall',
npm verb cli   '--verbose' ]
npm info using npm@6.8.0
npm info using node@v10.15.1
npm verb run-script [ 'postinstall' ]
npm info lifecycle gahhh@1.0.0~postinstall: gahhh@1.0.0

> gahhh@1.0.0 postinstall C:\Workspace\testing
> node script.js

npm verb lifecycle gahhh@1.0.0~postinstall: unsafe-perm in lifecycle true
npm verb lifecycle gahhh@1.0.0~postinstall: PATH: C:\Users\USERNAME\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Workspace\testing\node_modules\.bin;c:\program files\graphicsmagick-1.3.31-q16;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\RSA SecurID Token Common;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\WebEx\Productivity Tools;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_171\bin;C:\Program Files\maven\bin;C:\Program Files\PuTTY\;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;C:\Program Files\nodejs\;C:\Users\USERNAME\.windows-build-tools\python27\;C:\Users\USERNAME\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\USERNAME\AppData\Roaming\npm\node_modules\windows-build-tools\node_modules\.bin;C:\Users\USERNAME\AppData\Roaming\npm\node_modules\.bin;C:\Program Files\Docker\Docker\Resources\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\RSA SecurID Token Common;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Sennheiser\SoftphoneSDK\;C:\Program Files (x86)\WebEx\Productivity Tools;C:\Program Files (x86)\WebEx\PTools020000000;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_171\bin;C:\Program Files\nodejs\;C:\Program Files\maven\bin;C:\Program Files\PuTTY\;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps;C:\Users\USERNAME\AppData\Roaming\Composer\vendor\bin;C:\Users\USERNAME\AppData\Roaming\npm
npm verb lifecycle gahhh@1.0.0~postinstall: CWD: C:\Workspace\testing
npm info lifecycle gahhh@1.0.0~postinstall: Failed to exec postinstall script
npm info lifecycle gahhh@1.0.0~postinstall: Failed to exec postinstall script
npm verb stack Error: gahhh@1.0.0 postinstall: `node script.js`
npm verb stack spawn bash ENOENT
npm verb stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
npm verb stack     at onErrorNT (internal/child_process.js:415:16)
npm verb stack     at process._tickCallback (internal/process/next_tick.js:63:19)
npm verb pkgid gahhh@1.0.0
npm verb cwd C:\Workspace\testing
npm verb Windows_NT 10.0.14393
npm verb argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\USERNAME\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "postinstall" "--verbose"
npm verb node v10.15.1
npm verb npm  v6.8.0
npm ERR! file bash
npm ERR! path bash
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn bash
npm ERR! gahhh@1.0.0 postinstall: `node script.js`
npm ERR! spawn bash ENOENT
npm ERR!
npm ERR! Failed at the gahhh@1.0.0 postinstall 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 230ms

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\USERNAME\AppData\Roaming\npm-cache\_logs\2019-02-16T17_36_05_033Z-debug.log

如果我运行node script.js,我将获得预期的输出,因此这时我将头撞在桌子上。我的想法用光了。

节点版本:v10.15.1 npm版本:6.8.0

1 个答案:

答案 0 :(得分:0)

经过很长一段时间的搜索,显然可以确定shell=bash是如何进入我的.npmrc文件的。由于我使用Windows,因此bash对我来说不起作用。完全删除此行即可解决此问题。

如果其他任何人遇到此问题,我想分享一下。