git-bash: SyntaxError: missing ) 在参数列表之后

Posted

技术标签:

【中文标题】git-bash: SyntaxError: missing ) 在参数列表之后【英文标题】:git-bash: SyntaxError: missing ) after argument list 【发布时间】:2019-05-30 09:30:36 【问题描述】:

我正在尝试在 nuxt 项目上使用 vscode 设置调试:

https://medium.com/@justin.ramel/nuxt-js-debugging-in-visual-studio-code-822ff9d51c77

我已经做到了:

$ npm run dev-debug

> nuxt4@1.0.0 dev-debug E:\ENVS\js\nuxt4
> node --inspect node_modules/.bin/nuxt

Debugger listening on ws://127.0.0.1:9229/6f869cb6-7166-4182-b841-a528917d88fd
For help, see: https://nodejs.org/en/docs/inspector
E:\ENVS\js\nuxt4\node_modules\.bin\nuxt:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
        ^^^^^^^

SyntaxError: missing ) after argument list
    at new Script (vm.js:83:7)
    at createScript (vm.js:267:10)
    at Object.runInThisContext (vm.js:319:10)
    at Module._compile (internal/modules/cjs/loader.js:684:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
    at executeUserCode (internal/bootstrap/node.js:342:17)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! nuxt4@1.0.0 dev-debug: `node --inspect node_modules/.bin/nuxt`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the nuxt4@1.0.0 dev-debug script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

整个nuxt文件是:

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
"$basedir/node"  "$basedir/../nuxt/bin/nuxt.js" "$@"
ret=$?
else 
node  "$basedir/../nuxt/bin/nuxt.js" "$@"
ret=$?
fi
exit $ret

编辑:

我尝试进行更改并得到:

> node --inspect node_modules/.bin/nuxt

Debugger listening on ws://127.0.0.1:9229/458bafd6-1d8c-4a2b-8ec2-5ddc8b4f0fda
For help, see: https://nodejs.org/en/docs/inspector
E:\ENVS\js\nuxt4\node_modules\.bin\nuxt:1
(function (exports, require, module, __filename, __dirname)    #!/bin/sh
                                                                ^

SyntaxError: Invalid or unexpected token
    at new Script (vm.js:83:7)
    at createScript (vm.js:267:10)
    at Object.runInThisContext (vm.js:319:10)
    at Module._compile (internal/modules/cjs/loader.js:684:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
    at executeUserCode (internal/bootstrap/node.js:342:17)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! nuxt4@1.0.0 dev-debug: `node --inspect node_modules/.bin/nuxt`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the nuxt4@1.0.0 dev-debug script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我如何让它工作?

【问题讨论】:

【参考方案1】:

就我而言,我在 package.json 中使用了错误的路径:

当我有这样的时候它不起作用:

"scripts": 
  ...
  "dev-debug": "node --inspect node_modules/.bind/nuxt,
  ...

但是当我更改为正确的路径时它确实起作用了:

"dev-debug": "node --inspect node_modules/nuxt/bin/nuxt.js",

【讨论】:

【参考方案2】:

我有一个部分解释和一个应该适用于某些人的修复。

原因

问题的根本原因是node 将 Bash 或 Windows shell 脚本作为参数。如果您查看.bin 中的文件,例如node_modules\.bin\nuxt,您会意识到这些实际上是shell 脚本,它们应该返回javascript 文件的真实路径,该文件应该作为参数传递给node .

我什至不知道这在 Linux 下应该如何工作,但我在使用 git-bash 时遇到了这个问题,而在 Linux VM 上使用相同的代码库工作得很好,所以它绝对是特定于环境的.如果有人对此有答案,我很乐意将其添加到问题中。

解决方案

不要将.bin 中的文件传递给node。而是找到真实文件的路径并传递它。在这种情况下,它是node_modules/nuxt/bin/nuxt.js,许多库遵循相同的原则,但有时很难找到,例如Angular 在我的系统上的node_modules/@angular/cli/bin/ng 中。

注意事项

此解决方案绕过了JavaScript 文件的定位方式,并且可能会在更新库后停止工作。或者它可能不适用于所有系统。我不是node 开发人员,只是在尝试运行其他人的代码时才发现它。对于我的用例来说,这是一个足够好的解决方案,但可能对您不利。

【讨论】:

【参考方案3】:

这样工作

"dev-debug": "node --inspect node_modules/nuxt/bin/nuxt.js",

我使用这种方法的原因是因为这个开放的问题#8730 与 Nuxt。 VsCode 本机调试器(在 Nuxt 服务器端/静态生成器 || 通用应用程序上)未使用源映射。

如果您的 Nuxt 应用是 SPA,则没有问题。

【讨论】:

【参考方案4】:

我在 package.json 文件中使用以下配置

"scripts": 
  "test": "node --inspect node_modules/.bin/cross-env API_HOST=url ember serve",

上述配置适用于 Linux 机器。但我有一台 Windows 机器,在 npm run test 期间出现此错误。

就我而言,当我删除 node --inspect 时,它比它对我的工作更有效。

"test": "node_modules/.bin/cross-env API_HOST=url ember serve",

【讨论】:

【参考方案5】:

我不确定这是否是问题,但还是试试这个。就像我过去在使用旧式反引号 `` 时遇到了一些奇怪的错误。

使用 $(...) 表示法而不是传统的反引号 `...`

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case $(uname) in
    *CYGWIN*) basedir=$(cygpath -w "$basedir");;
esac

if [ -x "$basedir/node" ]; then
"$basedir/node"  "$basedir/../nuxt/bin/nuxt.js" "$@"
ret=$?
else 
node  "$basedir/../nuxt/bin/nuxt.js" "$@"
ret=$?
fi
exit $ret

【讨论】:

以上是关于git-bash: SyntaxError: missing ) 在参数列表之后的主要内容,如果未能解决你的问题,请参考以下文章

右键添加git-bash

右键git-bash不能使用

从服务执行 git-bash.exe

Visual Studio 外部工具中添加 git-bash

如何在同一目录的 Windows 终端中打开一个新的 git-bash 选项卡?

在 Windows 7 上使用 git-bash 更新文件权限