包裹:无法使用配置的端口 1234
Parcel: configured port 1234 could not be used
我需要 运行 我的 ReactJS 应用程序在端口 1234
上,但是当我 运行 yarn dev
时,我得到以下信息:
$ parcel src/index.html --port 1234
Server running at http://localhost:2493 - configured port 1234 could not be used.
√ Built in 11.45s.
它没有告诉我 为什么 它不能 运行 在端口 1234
上,所以我怀疑该端口可能已经在使用中.根据 this answer,下面应该告诉我哪个进程正在使用那个端口。
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
但这并没有帮助,它给出了以下信息:
Get-NetTCPConnection : No MSFT_NetTCPConnection objects found with property 'LocalPort' equal to '1234'. Verify the value of the property and retry.
我猜这意味着没有进程绑定到端口 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"
}
}
在本地使用 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)
如您所见,此错误消息比包裹错误详细得多。绑定端口时,现有应用程序会占用许多端口,例如维基百科报告 VLC 媒体播放器使用端口 1234(但它仅报告 UDP)。
在创建一个尝试绑定到端口 1234
的小型 C# Web 服务器后,我仍然无法让它工作。它会尝试绑定,但会抛出异常:
An attempt was made to access a socket in a way forbidden by its access permissions.
无论如何,经过大量的痛苦和研究,这里终于奏效了:
首先,禁用 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
现在终于重新启用 hyper-V(PC 将再次重启),再次以管理员身份通过 PowerShell:
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
当您的 PC 完成并备份后,您应该能够成功绑定到该端口。
我在一个项目中遇到了这个错误,但事实证明问题是我的项目是 运行 在 HTTPS 上,而 Parcel.js (v2.0) 通过 HTTP 捆绑。
这是我原来的Parcel.js命令:
parcel serve path/to/my.file
这是固定版本,通过 HTTPS 捆绑:
parcel serve path/to/my.file --https
我确信我的解决方案不会修复所有错误实例,但值得考虑。
我需要 运行 我的 ReactJS 应用程序在端口 1234
上,但是当我 运行 yarn dev
时,我得到以下信息:
$ parcel src/index.html --port 1234
Server running at http://localhost:2493 - configured port 1234 could not be used.
√ Built in 11.45s.
它没有告诉我 为什么 它不能 运行 在端口 1234
上,所以我怀疑该端口可能已经在使用中.根据 this answer,下面应该告诉我哪个进程正在使用那个端口。
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
但这并没有帮助,它给出了以下信息:
Get-NetTCPConnection : No MSFT_NetTCPConnection objects found with property 'LocalPort' equal to '1234'. Verify the value of the property and retry.
我猜这意味着没有进程绑定到端口 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"
}
}
在本地使用 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)
如您所见,此错误消息比包裹错误详细得多。绑定端口时,现有应用程序会占用许多端口,例如维基百科报告 VLC 媒体播放器使用端口 1234(但它仅报告 UDP)。
在创建一个尝试绑定到端口 1234
的小型 C# Web 服务器后,我仍然无法让它工作。它会尝试绑定,但会抛出异常:
An attempt was made to access a socket in a way forbidden by its access permissions.
无论如何,经过大量的痛苦和研究,这里终于奏效了:
首先,禁用 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
现在终于重新启用 hyper-V(PC 将再次重启),再次以管理员身份通过 PowerShell:
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
当您的 PC 完成并备份后,您应该能够成功绑定到该端口。
我在一个项目中遇到了这个错误,但事实证明问题是我的项目是 运行 在 HTTPS 上,而 Parcel.js (v2.0) 通过 HTTP 捆绑。
这是我原来的Parcel.js命令:
parcel serve path/to/my.file
这是固定版本,通过 HTTPS 捆绑:
parcel serve path/to/my.file --https
我确信我的解决方案不会修复所有错误实例,但值得考虑。