【问题标题】:How do you correctly use parallelshell with npm scripts?如何正确使用带有 npm 脚本的 parallelshell?
【发布时间】:2018-06-27 10:20:02
【问题描述】:

我正在尝试在 Windows 上将 parallelshell 与我的节点项目一起使用以同时运行两个进程。

这是我的 package.json 文件的脚本部分:

"scripts": {
"start": "npm run watch:all",
"test": "echo \"Error: no test specified\" && exit 1",
"lite": "lite-server",
"scss": "node-sass -o css/ css/",
"watch:scss": "onchange \"css/*.scss\" -- npm run scss",
"watch:all": "parallelshell \"npm run watch:scss\" \"npm run lite\""

}

当我运行命令 npm start 时,我得到这个错误日志:

TypeError [ERR_INVALID_ARG_TYPE]: The "options.cwd" property must be of type string. Received type function
at normalizeSpawnArguments (child_process.js:420:11)
at spawn (child_process.js:522:38)
at C:\Users\Daniel\Documents\development\online_classes\coursera_uhk_web_dev\Bootstrap4\conFusion\node_modules\parallelshell\index.js:104:17
at Array.forEach (<anonymous>)
at Object.<anonymous> (C:\Users\Daniel\Documents\development\online_classes\coursera_uhk_web_dev\Bootstrap4\conFusion\node_modules\parallelshell\index.js:100:6)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! confusion@1.0.0 watch:all: `parallelshell "npm run watch:scss" "npm run lite"`

npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the confusion@1.0.0 watch:all script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我的语法有问题吗?我可以单独运行命令npm run watch:scssnpm run lite,它们工作正常,但我无法运行parallelshell 命令。

谢谢!

【问题讨论】:

标签: node.js npm npm-scripts


【解决方案1】:

尝试将 parallelshell 版本从 3.0.2 降级到 3.0.1

根据声明,这只是一个临时修复。

https://github.com/darkguy2008/parallelshell/issues/57

以下是降级parallelshell的命令行语法:

sudo npm uninstall --save-dev parallelshell@3.0.2

sudo npm install --save-dev parallelshell@3.0.1

它对我有用。

希望这会有所帮助并告诉我们。

【讨论】:

  • 它适用于我,我正在使用斜体_ bold ubuntu 18.04 和斜体_ bold node v14.0.0,谢谢
  • 它有帮助,感谢您的回答。点赞!!
  • 是的,这对我也有用。谢谢!这么奇怪的错误。
【解决方案2】:

parallelshell 在每次使用时都会出现主动错误。这里的替代方法是使用 npm-run-all dev-dependency,而不是 parallelshell。

安装 npm-run-all

npm install --save-dev npm-run-all

然后在如下所示的 package.json 脚本中进行主动更改。

 "scripts": {
    "start": "npm run dev",
    "test": "echo \"Error: no test specified\" && exit 1",
    "lite": "lite-server",
    "scss": "node-sass -o css/ css/",
    "watch:scss": "onchange \"css/*.scss\" -- npm run scss",
    "dev": "npm-run-all -p watch:scss lite"
  }

【讨论】:

    【解决方案3】:

    所有正确的都可以在 Windows 操作系统上运行。只需尝试安装parallelshell@3.0.1:

    npm install --save-dev parallelshell@3.0.1
    

    然后再次拨打npm start

    【讨论】:

      【解决方案4】:

      node_modules/parallelshell/index.js:105 文件中更改一行

      来自:cwd: process.versions.node &lt; '8.0.0' ? process.cwd : process.cwd(),


      收件人:cwd: parseInt(process.versions.node) &lt; 8 ? process.cwd : process.cwd(),


      参考:Problem running parallelshell Nodejs script

      【讨论】:

        【解决方案5】:

        这是由于 npmparallelshell 的版本不兼容。
        尝试使用以下命令将其降级到 3.0.1:

        npm i --save-dev parallelshell@3.0.1
        

        100% 为我工作。

        【讨论】:

          【解决方案6】:

          它看起来对我来说是正确的,而不是转义你的双引号,你可以在双引号内使用单引号。

          不确定是否会有所作为。

          "watch:all": "parallelshell 'npm run watch:scss' 'npm run lite'"
          

          【讨论】:

          • OP 询问 Windows 机器。
          【解决方案7】:

          对于 MAC 和 Windows 机器是不同的。 MAC上的用户单引号和Windows上的“\”\。 还降级到 parallelshell 到 3.0.1 以使用 \"

          【讨论】:

            【解决方案8】:

            我改为使用 concurrently 包,它在 win64 上运行良好,提到的方法在 post 中。

            我只是简单地使用
            "watch:all": "concurrently \"npm run watch:scss\" \"npm run lite\""
            替换
            "watch:all": "parallelshell \"npm run watch:scss\" \"npm run lite\""

            【讨论】:

              【解决方案9】:

              这是使用 npm audit fix 无法修复的常见问题。您所能做的就是将parallelshell的实际index.js文件复制到您的node_modules目录中。

              因此,请按照以下说明进行操作:

              1.转到https://raw.githubusercontent.com/darkguy2008/parallelshell/master/index.js

              2. 将内容复制到这里。

              3.现在进入你的项目目录,可能是/project/node_modules/parallelshell/index.js

              4. 将 index.js 中的内容替换为您在步骤 1 中从链接中复制的内容。

              5. 保存文件并退出。

              希望此修复对您有用。

              【讨论】:

              • 请编辑您的答案。不要链接到某些代码,而是在此处发布node_modules/parallelshell/index.js 和您的链接之间的差异。之后将链接放在底部作为参考。该链接可能会在某一天更改或断开。另一个建议是使用像这样的永久链接(在某个提交时链接到 index.js 的版本):raw.githubusercontent.com/darkguy2008/parallelshell/… 此链接应始终显示相同的内容,而不是 master 分支中的最新版本。
              【解决方案10】:

              如果有人在更改 index.js 或降级到 3.0.1 版本后仍然遇到错误,更好的选择是使用 npm-run-all

              【讨论】:

                猜你喜欢
                • 2016-09-26
                • 2018-03-07
                • 2019-04-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-09-06
                • 2020-09-14
                • 2017-08-29
                相关资源
                最近更新 更多