从 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 错误
在 Netlify 中从 package.json 运行两个脚本
如何从 package.json“脚本”执行 powershell ps1 脚本?