web-dev-qa-db-fra.com

Résolution de l'erreur 'npm WARN saveError ENOENT: aucun fichier ni répertoire de ce type ne s'ouvre, ouvrez' /Users/<username>/package.json ''

Je suis un novice. Merci d'inclure des liens vers des URL ou d'expliquer la terminologie afin que je puisse comprendre.

J'ai réussi à installer 'npm' sur un Mac OS (10.13.3) via le terminal et j'ai installé des paquets comme SASS.

J'essaye maintenant d'installer sass-mq en utilisant npm. Je pense que j'ai réussi à l'installer, mais j'aimerais avoir un deuxième avis sur ce que j'aurais pu faire et qui était incomplet ou faux en le faisant.

Initialement, en suivant les instructions de la page sith-mq Github, j'essayais d'utiliser:

npm install sass-mq --save

qui m'a donné cette erreur:

npm WARN saveError ENOENT: no such file or directory, open '/Users/<username>/package.json'
    npm WARN enoent ENOENT: no such file or directory, open '/Users/<username>/package.json'
    npm WARN <username> No description
    npm WARN <username> No repository field.
    npm WARN <username> No README data
    npm WARN <username> No license field.

    + [email protected]
    updated 1 package and audited 1 package in 1.67s
    found 0 vulnerabilities

En regardant autour de moi, je réalisai que je devais utiliser

npm init

.. avant de taper ma commande 'install sass-mq --save'.

Cool, fait ça. L'erreur suivante était la suivante:

package name: (nikhil) sass-mq
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/nikhil/package.json:

{
  "name": "sass-mq",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "sass-mq": "^5.0.0"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) 
darwin:~ nikhil$ npm install sass-mq --save
npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "sass-mq" under a package
**npm ERR! also called "sass-mq". Did you name your project the same
npm ERR! as the dependency you're installing?**

Je pense que cela signifie que je ne peux pas utiliser 'sass-mq' (qui est le nom du paquet, en tant que nom du paquet local (?) Dans lequel j'installe sur ma machine locale. Certains plus d'infos ici.

Alors j'ai simplement essayé ceci:

**package name: (sass-mq) media-queries-nikhil**
version: (1.0.0) 
description: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/nikhil/package.json:

et cela semble avoir fonctionné correctement.

Ma question est la suivante: est-ce la bonne façon dont j'aurais dû le faire? Comment faites-vous habituellement cela?

De plus, je reçois ces avertissements - puis-je les ignorer?

npm WARN [email protected] No description
npm WARN [email protected] No repository field.

Je crée cette question en partie pour que d'autres, comme moi, cherchant la réponse à un problème similaire puissent trouver une explication, au lieu des commandes dont ils ont besoin pour résoudre leur problème. J'ai trouvé quelques questions similaires, mais aucune ne permettait réellement d'expliquer ce qui se passait et pourquoi.

Merci d'avoir lu, j'apprécie vraiment toute aide avec ceci :)

10
Nikhil Vijayan

TL; DR: La façon dont vous l'avez fait est bien, et vous n'avez pas à vous soucier de ces avertissements.

Pour une idée plus détaillée de la raison pour laquelle npm existe et de son fonctionnement, lisez la suite.

npm signifie Node Gestionnaire de packages. Les packages sont un élément fondamental de l'écosystème de noeuds. Ils existent pour vous permettre d'utiliser les solutions d'autres personnes pour résoudre des problèmes courants.

Cependant, cela peut devenir très déroutant, car, comme il s’agit d’une communauté open source, ils sont tous publiés à des moments différents par des personnes différentes. En outre, deux packages différents que vous utilisez peuvent en réalité dépendre d'un troisième package qui vous est totalement inconnu, et potentiellement, ils peuvent même avoir besoin de versions différentes de ce package.

Comme vous pouvez déjà le constater, cela peut devenir très compliqué.

npm vous aide à gérer ces "dépendances" d'une manière plus facile à gérer et à prendre en compte, mais il n'est pas indispensable d'utiliser npm - vous pouvez écrire une application de nœud dans laquelle vous organiserez vous-même tous ces différents fichiers. Cela va devenir très déroutant très rapidement, cependant, il n'y a donc aucun avantage réel dans au moins 99% des cas. Il y a aussi d'autres gestionnaires de paquets - personnellement, j'utilise du fil, mais ils essaient tous de faire la même chose, alors ce choix est principalement une question de préférence et sort du cadre de cette discussion.

Ainsi, lorsque vous démarrez un nouveau projet, vous tapez npm init Et ceci indique à npm de créer dans votre dossier un fichier appelé package.json qui vous aidera à organiser ces dépendances. package.json détiendra les informations sur votre propre application (qui est un package lui-même) ainsi que sur les packages que vous avez indiqués à npm et que vous allez utiliser comme dépendances dans votre propre projet. C’est la raison pour laquelle il vous pose toutes ces questions sur le nom et la description de votre paquet. Ainsi, si vous le publiez, les gens sauront qui contacter, ce qu’il fait, de quelle version, etc.

Il est seulement important de réfléchir sérieusement si vous avez réellement l'intention de publier votre paquet, ce qui est moins probable dans le cas d'un site Web, mais très probablement si vous créez une bibliothèque. Toutefois, comme vous l'avez déjà constaté, les packages sont conçus pour avoir des noms uniques. C'est pourquoi vous devez appeler votre package de manière personnelle, afin d'éviter un conflit paquet identique à un paquet que vous alliez installer par la suite.

Créons donc notre propre paquet et installons notre première dépendance (qui, rappelez-vous, n’est qu’un autre paquet). Je vais choisir l'horodatage comme dépendance parce que c'est gentil et petit.

Vous allez d’abord créer votre répertoire de projet. Ceci est juste un nouveau répertoire vide. Appelons cela ts. À l'intérieur du répertoire ts, tapez npm init Dans votre terminal et répondez à ses questions (bien que j'appuie généralement sur la touche Retour à tous), puis regardez à l'intérieur du répertoire et vous verrez le fichier package.json. Ouvrez le fichier et vous verrez toutes les informations sur le package votre. Et actuellement c'est tout.

Revenons maintenant à la ligne de commande et tapez npm install time-stamp. Lorsque vous avez terminé, ouvrez package.json à nouveau et vous verrez l'horodatage référencé dans la liste des "dépendances". (A partir de npm 5, il n’est plus nécessaire d’utiliser l’option --save. Npm assume maintenant cette fonction par défaut. Qu'est-ce que l'option --save pour l'installation de npm? )

De retour dans le répertoire, vous verrez également un autre fichier appelé package-lock.json et un répertoire appelé node_modules.

Le répertoire node_modules contiendra un répertoire appelé horodatage, qui contient tout le code permettant de faire fonctionner horodatage. Vous n'avez probablement pas besoin de regarder ici très souvent, mais vous pouvez, et si vous regardez à l'intérieur du répertoire d'horodatage, vous verrez qu'il a son propre package.json! Ouvrez-le et jetez un coup d'œil. Vous y trouverez toutes les informations nécessaires à l'installation. Vous remarquerez qu’il n’a pas de dépendances, mais si c’était le cas, elles seraient installées dans votre node_modules avec tous leurs dépendances aussi ... et leurs dépendances ... et le leur ... Si vous voulez voir cela en action, essayez d'installer le blague du framework de test. Encore une fois, juste npm install jest.

Espérons que tout commence à avoir un sens, maintenant ...

Le fichier de verrouillage est légèrement plus compliqué. Cela permet de s'assurer que lorsque vous déployez votre projet sur un nouveau système, vous utilisez exactement le même ensemble de dépendances. Cela doit se faire, car la façon dont npm organise les choses peut dépendre des dernières versions, etc., et il serait très ennuyant d’essayer de déployer votre application et cela ne fonctionnera pas car vos dépendances se comportent de manière différente. loin de votre environnement de développement!

Cela dit, vous pouvez l’ignorer à ce stade! C'est une partie importante de npm, mais vous ne devriez pas le modifier directement à moins de savoir vraiment ce que vous faites.

Une fois que vous avez installé votre dépendance, vous pourrez require ou import it n'importe où dans votre projet, sans avoir à vous soucier de le diriger vers le bon chemin dans votre structure de répertoires. Juste require('time-stamp') et ça marchera très bien!

Enfin, et bien fait pour aller aussi loin, il convient de mentionner l'installation globale. L'utilisation de l'option -g - c'est-à-dire npm install time-stamp -g - signifie que la dépendance sera installée dans un répertoire central node_modules quelque part sur votre ordinateur plutôt que dans le dossier node_modules de votre projet. Cependant, vous devrez toujours le lier à votre projet (pour qu'il devienne une dépendance dans votre package.json) et vous le feriez en tapant npm link time-stamp. Personnellement, j'aime que tous mes modules soient locaux dans mon projet, mais encore une fois, cela dépend de vos cas d'utilisation et, dans une certaine mesure, de vos préférences personnelles.

Cela signifie simplement que la combinaison de votre package.json et du fichier de verrouillage est une représentation parfaite de tous les fichiers de votre node_modules, ce qui signifie que vous ne besoin de les avoir dans votre git (ou autre référentiel.) Vous pouvez extraire votre référentiel vers un nouveau serveur, il vous suffit de taper npm install et ils seront traînés depuis Internet là-bas et ensuite. Cela devient beaucoup plus important lorsque vous avez un projet volumineux, à cause de tous les fichiers impliqués dans vos dépendances, mais c'est une bonne habitude d'ajouter "node_modules" à votre .gitignore dès le premier jour. Mais je commence à sortir du sujet alors je devrais peut-être terminer ici ...

Ceci est seulement destiné à être une introduction de base, donc je l’ai gardée assez simple, et je ne veux pas créer de tutoriel en profondeur, mais si vous avez besoin de clarification sur l’un de mes points, n'hésitez pas à commenter et je ferai des modifications si je peux!

7
Abulafia

Vous ne pouvez pas nommer votre projet égal au nom du package que vous essayez d'installer.

Renommez votre projet dans le package JSON et réessayez ou essayez npm init et utilisez un autre nom.

1
Fernando Paz

Le même problème s'est produit pour moi lors de l'exécution:

npm install -g @ vue/cli

Après de nombreuses recherches et expérimentations, la seule chose qui a fonctionné à la place a été:

npm install -g @ vue/cli @ latest

1
Thomas M

fermez le projet et rouvrez-le, le problème sera résolu

0
ilham zacky