{"record":{"id":"e41129fa73922000","repo":"parcel-bundler/parcel","slug":"port-portvalue-is-not-a-valid-integer","errorCode":null,"errorMessage":"Port ${portValue} is not a valid integer.","messagePattern":"Port (.+?) is not a valid integer\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/parcel/src/cli.js","lineNumber":417,"sourceCode":"    } catch (err) {\n      // If an exception is thrown during Parcel.build, it is given to reporters in a\n      // buildFailure event, and has been shown to the user.\n      if (!(err instanceof BuildError)) {\n        await logUncaughtError(err);\n      }\n      await exit(1);\n    }\n\n    await exit();\n  }\n}\n\nfunction parsePort(portValue: string): number {\n  let parsedPort = Number(portValue);\n\n  // Throw an error if port value is invalid...\n  if (!Number.isInteger(parsedPort)) {\n    throw new Error(`Port ${portValue} is not a valid integer.`);\n  }\n\n  return parsedPort;\n}\n\nfunction parseOptionInt(value) {\n  const parsedValue = parseInt(value, 10);\n  if (isNaN(parsedValue)) {\n    throw new commander.InvalidOptionArgumentError('Must be an integer.');\n  }\n  return parsedValue;\n}\n\nasync function normalizeOptions(\n  command,\n  inputFS,\n): Promise<InitialParcelOptions> {\n  let nodeEnv;","sourceCodeStart":399,"sourceCodeEnd":435,"githubUrl":"https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L399-L435","documentation":"Thrown by parsePort() when the --port CLI argument cannot be parsed as an integer. The function uses Number(portValue) then checks Number.isInteger(). This catches floats (e.g., '1234.5'), non-numeric strings (e.g., 'abc'), empty strings, and special values like NaN/Infinity. Note: integer strings like '8080' pass correctly.","triggerScenarios":"Running `parcel serve --port abc`, `parcel serve --port 8080.5`, or `parcel serve --port ''`. parsePort receives the raw string from commander, calls Number() on it, and Number.isInteger() returns false for any non-integer result. The default port ('1234') is used when no --port is provided and always passes.","commonSituations":"Passing a hostname or URL as the port by mistake. Using a float port number. Empty string from an environment variable expansion that resolves to nothing. Shell quoting issues passing an unexpected value. Port range notation like '3000-3010' (Parcel doesn't support ranges).","solutions":["Provide a valid integer port number: `--port 3000`.","If using an environment variable, ensure it's set and numeric: `--port $PORT` where PORT=3000.","Remove the --port flag to use the default port 1234.","Validate before passing: `[[ \"$PORT\" =~ ^[0-9]+$ ]] && parcel serve --port $PORT`."],"exampleFix":"// before\n$ parcel serve --port 8080.5\n// Error: Port 8080.5 is not a valid integer.\n\n// after\n$ parcel serve --port 8080","handlingStrategy":"validation","validationCode":"// Validate port before passing to Parcel CLI\nfunction validatePort(portStr) {\n  let parsed = Number(portStr);\n  if (!Number.isInteger(parsed) || parsed < 0 || parsed > 65535) {\n    throw new Error(`Invalid port: ${portStr}. Must be an integer 0-65535.`);\n  }\n  return parsed;\n}\n\n// In a script:\nconst port = validatePort(process.env.PORT || '3000');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass integer port numbers without decimal points or non-numeric characters.","Validate environment variables before passing as CLI args.","Use a port range of 1024-65535 for user-level processes to avoid permission issues."],"tags":["cli","port","argument-parsing","integer","validation"],"backgroundTag":null,"analyzedSha":"59484858a1a0bcbb71f74088956bb437a2db6505","analyzedAt":"2026-08-13T04:06:35.925Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}