包裹:无法使用配置的端口 1234

Posted

技术标签:

【中文标题】包裹:无法使用配置的端口 1234【英文标题】:Parcel: configured port 1234 could not be used 【发布时间】:2020-01-29 05:27:40 【问题描述】:

我需要在端口 1234 上运行我的 ReactJS 应用程序,但是当我运行 yarn dev 时,我得到以下信息:

$ parcel src/index.html --port 1234

在http://localhost:2493 运行的服务器 - 无法使用配置的端口 1234。

√ 内置 11.45 秒。

它没有告诉我为什么它不能在端口1234 上运行,所以我怀疑该端口可能已经在使用中。根据this answer,下面应该告诉我哪个进程正在使用该端口。

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

但这并没有帮助,它给出了以下消息:

Get-NetTCPConnection:没有找到属性“LocalPort”等于“1234”的 MSFT_NetTCPConnection 对象。验证属性的值并重试。

我猜这意味着没有进程绑定到端口1234。但是如果是这样的话,为什么我不能绑定到那个端口呢?

我的package.json如下:


    "name": "bejebeje.react",
    "version": "1.0.0",
    "description": "bejebeje's react-js frontend",
    "main": "index.js",
    "repository": "git@github.com:JwanKhalaf/Bejebeje.React.git",
    "author": "John",
    "license": "GPL-3.0",
    "dependencies": 
        "@fortawesome/fontawesome-svg-core": "^1.2.19",
        "@fortawesome/free-brands-svg-icons": "^5.9.0",
        "@fortawesome/free-solid-svg-icons": "^5.9.0",
        "@fortawesome/pro-light-svg-icons": "^5.9.0",
        "@fortawesome/pro-regular-svg-icons": "^5.9.0",
        "@fortawesome/pro-solid-svg-icons": "^5.9.0",
        "@fortawesome/react-fontawesome": "^0.1.4",
        "@reach/router": "^1.2.1",
        "oidc-client": "^1.8.2",
        "react": ">=16",
        "react-dom": "^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0",
        "react-icons": "^3.7.0",
        "styled-components": "^4.3.2"
    ,
    "scripts": 
        "dev": "parcel src/index.html --port 1234",
        "build": "parcel build src/index.html"
    ,
    "devDependencies": 
        "@fortawesome/fontawesome-pro": "^5.9.0",
        "axios": "^0.19.0",
        "parcel-bundler": "^1.12.3",
        "prettier": "^1.16.4",
        "sass": "^1.22.5"
    

【问题讨论】:

你的机器上有 VLC 媒体播放器吗? 嗯,我知道,你为什么这么问? 【参考方案1】:

我在一个项目中遇到了这个错误,但事实证明问题是我的项目在 HTTPS 上运行,而 Parcel.js (v2.0) 是通过 HTTP 捆绑的。

这是我原来的 Parcel.js 命令:

parcel serve path/to/my.file

这是固定版本,通过 HTTPS 捆绑:

parcel serve path/to/my.file --https

我确信我的解决方案不会修复每个错误实例,但值得考虑。

【讨论】:

【参考方案2】:

在创建一个尝试绑定到端口1234 的小型 C# Web 服务器后,我仍然无法让它工作。它会尝试绑定,但会抛出异常:

试图以访问权限禁止的方式访问套接字。

无论如何,经过大量的痛苦和研究,这里终于奏效了:

首先,禁用 hyper-v(这将重新启动您的 PC,因此请确保保存所有工作)。在 PowerShell(以管理员身份)中运行以下命令:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

当您的 PC 重新启动后,您需要保留所需的端口,以便 hyper-v 不会将其保留回来,再次以管理员身份通过 PowerShell,运行以下命令:

netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1

现在终于以管理员身份再次通过 PowerShell 重新启用 hyper-V(PC 将再次重启):

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

当您的 PC 完成并备份后,您应该能够成功绑定到该端口。

【讨论】:

【参考方案3】:

使用 parcel 在本地测试我能够通过故意强制以下状态得到相同的错误:

正在使用的端口 未经授权使用端口 端口无效

您收到的错误消息非常粗俗。要确定实际错误是什么,您可以尝试使用您希望的其他语言或程序绑定端口。由于是在 javascript 中,我们可以使用这个脚本

require('http').createServer(function()).listen(1234);

在我的情况下,我已经在另一个应用程序中绑定了端口 1234,我收到以下错误:

events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::1234
    at Server.setupListenHandle [as _listen2] (net.js:1270:14)
    at listenInCluster (net.js:1318:12)
    at Server.listen (net.js:1405:7)
    at Object.<anonymous> (C:\workdir\ETL_feed\listen.js:1:106)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
Emitted 'error' event at:
    at emitErrorNT (net.js:1297:8)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:757:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

如您所见,此错误消息比包裹错误更详细。当绑定端口时,现有应用程序会占用许多端口,例如 Wikipedia 报告 VLC 媒体播放器使用端口 1234(但它仅报告 UDP)。

【讨论】:

以上是关于包裹:无法使用配置的端口 1234的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用 npm 安装包裹

StreamWriter 在其包裹的 Pipe 未排空时无法关闭?

Linux配置防火墙添加端口(Ubuntu/Debian无法使用此方法)

配置为侦听端口 80 的 Tomcat 连接器无法启动

CDH6.3.2平台使用的端口概览

Android中ImageView中无法直接包裹图片