Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

package.json files that start with a UTF-8 BOM are rejected as invalid JSON

Chiusa Adatta ai principianti
#14 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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

bug
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, although npm run <script> works in that folder;
  • would pick the wrong package manager: the packageManager field is read with the same JSON.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
  1. Create a project whose package.json starts 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.json
    

    In PowerShell 7, the same file can be written with Set-Content -Encoding utf8BOM; Windows PowerShell 5.1 adds the BOM with -Encoding UTF8.

  2. Check that npm accepts it:

    cd /tmp/dws-bom/bom-app && npm run hello
    

    This prints hello.

  3. 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:

Suggested fix
  1. 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.
  2. Add tests: getScripts(), detectPackageManager() and readWorkspaceConfig() each read a file that starts with a BOM.

I'm happy to open a PR for this.

Environment
  • @modulane/dev-workspace-cli 0.5.0 from npm. lib/ is identical on main at 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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di modulane/dev-workspace-cli

Tutte le issue di modulane/dev-workspace-cli

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.