从 Package.json 脚本运行 BrowserSync 时出错

Posted

技术标签:

【中文标题】从 Package.json 脚本运行 BrowserSync 时出错【英文标题】:Error When Running BrowserSync from Package.json Scripts 【发布时间】:2020-11-08 20:39:01 【问题描述】:

我已设置 Browser Sync 以使用 nodemon 和 express。我使用 gulp 或 grunt,而是通过我的 package.json 文件中的 npm 脚本运行所有内容。

现在,一切正常,但我在运行脚本时遇到错误,我想知道错误是什么以及如何修复它。

首先,这是我的设置:


  "scripts": 
    "dev": "npm run development",
    "dev:css": "postcss assets/css/style.css -o public/assets/css/style.css",
    "dev:sync": "browser-sync start --proxy 'localhost:3000' --files='./views/**/*.html' --no-ui --no-notify",
    "development": "cross-env NODE_ENV=development concurrently \"npm:dev:css\" \"nodemon app.js -e js,html\" \"npm:dev:sync\"",
  ,
  "dependencies": 
    "concurrently": "^5.2.0",
    "express": "^4.17.1"
  ,
  "devDependencies": 
    "browser-sync": "^2.26.10",
    "cross-env": "^7.0.2"
  


这是错误信息:

 YError: Invalid first argument. Expected boolean or string but received function.
[dev:sync]     at argumentTypeError (C:\laragon\www\projects\startup-reporter--node\node_modules\yargs\build\lib\argsert.js:64:11)
[dev:sync]     at C:\laragon\www\projects\startup-reporter--node\node_modules\yargs\build\lib\argsert.js:45:17
[dev:sync]     at Array.forEach (<anonymous>)
[dev:sync]     at Object.argsert (C:\laragon\www\projects\startup-reporter--node\node_modules\yargs\build\lib\argsert.js:38:25)
[dev:sync]     at Object.version (C:\laragon\www\projects\startup-reporter--node\node_modules\yargs\build\lib\yargs.js:796:19)
[dev:sync]     at runFromCli (C:\laragon\www\projects\startup-reporter--node\node_modules\browser-sync\dist\bin.js:46:10)
[dev:sync]     at Object.<anonymous> (C:\laragon\www\projects\startup-reporter--node\node_modules\browser-sync\dist\bin.js:38:5)
[dev:sync]     at Module._compile (internal/modules/cjs/loader.js:776:30)
[dev:sync]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
[dev:sync]     at Module.load (internal/modules/cjs/loader.js:643:32)

知道这条消息是关于什么的以及如何修复它吗?

谢谢。

【问题讨论】:

【参考方案1】:

这里的回购中有一个问题:https://github.com/BrowserSync/browser-sync/issues/1782

在团队解决问题之前,降级可能是一种解决方法。 npm -g install browser-sync@2.26.7。我刚刚确认这确实消除了警告。

还注意到这不是错误,而是警告,因此包将按预期工作,但控制台输出会混乱。

【讨论】:

暂时降级。谢谢【参考方案2】:

我在我的 linux 机器上通过 sudo npm install -g browser-sync 安装了浏览器同步,我得到了完全相同的错误。

节点版本:

~$ node -v
v10.13.0

Npm 版本:

~$ npm -v
6.4.1

然后我运行browser-sync --version 得到:

YError: Invalid first argument. Expected boolean or string but received function.
    at argumentTypeError (/usr/local/lib/node_modules/browser-sync/node_modules/yargs/build/lib/argsert.js:64:11)
    at parsed.optional.forEach (/usr/local/lib/node_modules/browser-sync/node_modules/yargs/build/lib/argsert.js:45:17)
    at Array.forEach (<anonymous>)
    at Object.argsert (/usr/local/lib/node_modules/browser-sync/node_modules/yargs/build/lib/argsert.js:38:25)
    at Object.version (/usr/local/lib/node_modules/browser-sync/node_modules/yargs/build/lib/yargs.js:796:19)
    at runFromCli (/usr/local/lib/node_modules/browser-sync/dist/bin.js:46:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/browser-sync/dist/bin.js:38:5)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
[Function]

虽然我是 npm 的初学者,但这似乎不是权限问题

【讨论】:

【参考方案3】:

我在 Windows 上遇到了同样的错误,我尝试按照文档安装 Visual Studio 来修复一些 c+ 问题并重新安装,但它一直出现相同的错误,当我在全局安装时它工作正常,但如果我安装在单个项目它甚至无法识别浏览器同步版本提示,我尝试更新 npm 和节点,问题仍然存在,但我注意到当我安装 node-sass 之类的东西时,我遇到了以前没有的相同问题,所以我猜这个问题与 npm 的一些全局配置有关,我重新安装了它,仍然没有,所以肯定是其他的东西与之冲突,今天我要试试 yarn,看看会发生什么。

提示 npm list --depth 0 会得到什么

https://gist.github.com/soyrbto/5bc81049780baab3f3c4211c0b7548bd

这发生在我身上,我想检查一下我们是否有同样的问题

【讨论】:

我在运行npm list --depth 0时没有收到任何错误【参考方案4】:

我找到了答案,我使用这个从地面卸载节点 How to completely remove node.js from Windows 并重新安装它(如果你想像巧克力一样安装额外的组件,你必须安装 Visual Studio 2017,否则你会看到一个错误)

在我重新安装它之后,我设法再次安装并开始使用这些软件包,似乎这是一个不会消失的冲突,除非你手动删除文件夹。

我还安装了最新版本的节点,我不相信这与它无关,但如果你想完全复制我所做的。

【讨论】:

以上是关于从 Package.json 脚本运行 BrowserSync 时出错的主要内容,如果未能解决你的问题,请参考以下文章

从命令行运行 `node index.js` 可以,但是当我在 package.json 中使用启动脚本时,我得到一个 EADDRINUSE /usr/bin/local/node 错误

如何使用 package.json 运行 ts 脚本?

在 Netlify 中从 package.json 运行两个脚本

如何从 package.json“脚本”执行 powershell ps1 脚本?

万一失败,如何继续运行 package.json 中定义的脚本?

如何在 package.json 脚本中运行多个命令?