package.json files that start with a UTF-8 BOM are rejected as invalid JSON
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js
- Ambito
- cli
Direzione di ricerca
Leggi lib/workspace.js, lib/package-managers.js e lib/config.js, iniziando dai tre punti di parsing indicati nell’issue. Verifica come i test esistenti coprono il parsing JSON, poi aggiungi casi con BOM iniziale per getScripts(), detectPackageManager() e readWorkspaceConfig(). Il lavoro è completato quando ogni file viene letto correttamente e il BOM non influisce sui valori analizzati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
A package.json that starts with a UTF-8 byte order mark (BOM) is rejected by the CLI, while npm reads it without complaint. Files like this are common on Windows: Windows PowerShell 5.1 writes a BOM with Set-Content -Encoding UTF8 or Out-File -Encoding utf8, and some editors add one.
For such a project, the CLI:
- shows no scripts: opening the project shows
Could not read package.json: Invalid JSON in …instead of the script list, althoughnpm run <script>works in that folder; - would pick the wrong package manager: the
packageManagerfield is read with the sameJSON.parse, which fails silently, so a"packageManager": "[email protected]"project is detected as npm.
The CLI's own configuration file has the same problem: a config.json saved with a BOM, for example after editing it in an editor that adds one, is reported as Invalid configuration JSON.
Steps to reproduce
-
Create a project whose
package.jsonstarts with a BOM.In a POSIX shell:
mkdir -p /tmp/dws-bom/bom-app printf '\357\273\277{"name":"bom-app","packageManager":"[email protected]","scripts":{"hello":"echo hello"}}' \ > /tmp/dws-bom/bom-app/package.jsonIn PowerShell 7, the same file can be written with
Set-Content -Encoding utf8BOM; Windows PowerShell 5.1 adds the BOM with-Encoding UTF8. -
Check that npm accepts it:
cd /tmp/dws-bom/bom-app && npm run helloThis prints
hello. -
Start the published CLI on the workspace, then open
bom-app:DEV_WORKSPACE_CONFIG=/tmp/dws-bom/config.json \ npx -p @modulane/[email protected] dws --workspace /tmp/dws-bom
Actual behaviour
The project screen shows the error from getScripts(). Observed on Windows, with the folder path shortened:
Could not read package.json: Invalid JSON in …\bom-app\package.json: Unexpected token '', "{"name":""... is not valid JSON
Called directly on the same folder, detectPackageManager() returns { "name": "npm", "source": "default" } instead of pnpm from the packageManager field.
Expected behaviour
The BOM is ignored, as npm does: the script list shows hello, and the package manager line reads pnpm (from the packageManager field). A config.json with a BOM is read normally.
Cause
Three places pass the file content straight to JSON.parse, which rejects a leading U+FEFF:
getScripts()inworkspace.js;readPackageManagerField()inpackage-managers.js, which then falls back to the lockfile or npm without any message;readWorkspaceConfig()inconfig.js.
Suggested fix
- Remove a single leading
before parsing, in all three places, for example with a small shared helper that reads and parses a JSON file. Only the start of the file is affected, so a BOM-like character inside a string value is kept. - Add tests:
getScripts(),detectPackageManager()andreadWorkspaceConfig()each read a file that starts with a BOM.
I'm happy to open a PR for this.
Environment
@modulane/dev-workspace-cli0.5.0 from npm.lib/is identical onmainat dfccb6b.- Node.js 22.13.1 and npm 10.9.2, Windows 11. The parsing code is the same on every platform.
- Lingua principale
- JavaScript
- Stelle
- 0
- Fork
- 0
- Merge medio
- 43m
- PR unite (30g)
- 20
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modulane/dev-workspace-cli
-
enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
modulane/dev-workspace-cli#26 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 22/100
modulane/dev-workspace-cli#54 ·
I maintainer di solito rispondono entro 1 giorno
-
Write the 1.0 documentationApertaenhancement help wanted
Difficoltà 4/5 3-5 giorni Idoneità per principianti 43/100
modulane/dev-workspace-cli#53 ·
I maintainer di solito rispondono entro 1 giorno
-
Clean up legacy behaviourApertaenhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
modulane/dev-workspace-cli#52 ·
I maintainer di solito rispondono entro 1 giorno
-
Freeze the public interfaceApertaenhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
modulane/dev-workspace-cli#51 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di modulane/dev-workspace-cli
Issue simili
-
FEATURE REQUEST
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
linuxmint/cinnamon-spices-extensions#1193 ·
I maintainer di solito rispondono entro 1 giorno
-
ds-bot collides with dsh-argp: tool "recall" is already registered, Bot layer never activatesApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Fei2411/DeepSeek-Bot#703 ·
-
area:web first-timers-only good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
career-ops-hq/career-ops#6264 ·
I maintainer di solito rispondono entro 1 giorno
-
[Server Submission]: Wiro AIAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
cline/mcp-marketplace#3394 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
exelearning/exelearning#2677 ·
I maintainer di solito rispondono entro 1 giorno