Installation npm en Sandbox
Quand utiliser cette skill
Utilisez cette skill chaque fois que :
- Vous devez installer des packages npm pour la première fois dans une nouvelle session sandbox
package.jsonoupackage-lock.jsona changé et vous devez réinstaller- Vous rencontrez des crashs de binaires natifs avec des erreurs comme
SIGILL,SIGSEGV,mmap, ouunaligned sysNoHugePageOS - Le répertoire
node_modulesest manquant ou corrompu
Prérequis
- Un environnement sandbox Docker avec un workspace monté via virtiofs
- Node.js et npm disponibles dans le conteneur
- Un fichier
package.jsondans le workspace cible
Contexte
Les workspaces sandbox Docker sont généralement montés via virtiofs (synchronisation de fichiers entre l'hôte et la VM Linux). Les binaires natifs Go et Rust (esbuild, lightningcss, rollup, etc.) crashent avec des erreurs d'alignement mmap quand ils sont exécutés depuis virtiofs sur aarch64. La solution consiste à installer sur le système de fichiers ext4 local du conteneur et à créer un symlink vers le workspace.
Installation étape par étape
Exécutez le script d'installation fourni depuis la racine du workspace :
bash scripts/install.sh
Options courantes
| Option | Description |
|---|---|
--workspace <path> |
Chemin du répertoire contenant package.json (détecté automatiquement si omis) |
--playwright |
Installe également le navigateur Chromium de Playwright pour les tests E2E |
Ce que fait le script
- Copie
package.json,package-lock.json, et.npmrc(s'il existe) dans un répertoire ext4 local - Exécute
npm ci(ounpm installs'il n'y a pas de lockfile) sur le système de fichiers local - Crée un symlink de
node_modulesvers le workspace - Vérifie les binaires natifs connus (esbuild, rollup, lightningcss, vite) s'ils sont présents
- Installe optionnellement les navigateurs Playwright et les dépendances système (utilise
sudosi disponible)
Si la vérification échoue, exécutez le script à nouveau — les crashs peuvent être intermittents lors de la configuration initiale.
Vérification post-installation
Une fois le script terminé, vérifiez que votre chaîne d'outils fonctionne. Par exemple :
npm test # Exécuter les tests du projet
npm run build # Construire le projet
npm run dev # Démarrer le serveur de dev
Notes importantes
- Le répertoire d'installation local (ex.
/home/agent/project-deps) est local au conteneur et N'EST PAS synchronisé vers l'hôte - Le symlink
node_modulesapparaît comme un lien cassé sur l'hôte — c'est inoffensif carnode_modulesest généralement gitignored - Exécuter
npm ciounpm installsur l'hôte remplace naturellement le symlink par un répertoire réel - Après tout changement de
package.jsonoupackage-lock.json, réexécutez le script d'installation - N'exécutez PAS
npm ciounpm installdirectement dans le workspace monté — les binaires natifs crasheront
Dépannage
| Problème | Solution |
|---|---|
SIGILL ou SIGSEGV lors du lancement du serveur de dev |
Réexécutez le script d'installation ; assurez-vous que vous ne lancez pas npm install directement dans le workspace |
node_modules introuvable après installation |
Vérifiez que le symlink existe : ls -la node_modules |
| Erreurs de permission pendant l'installation | Assurez-vous que le répertoire des dépendances locales est accessible en écriture par l'utilisateur actuel |
| La vérification échoue de manière intermittente | Exécutez le script à nouveau — les crashs de binaires natifs peuvent être non-déterministes au premier chargement |
Compatibilité Vite
Si votre projet utilise Vite, vous devrez peut-être autoriser le chemin symlinké dans server.fs.allow. Ajoutez le répertoire parent de la cible du symlink (ex. /home/agent/project-deps/) à votre configuration Vite pour que Vite puisse servir les fichiers via le symlink.