Bonjour mes amis!
Je continue à poster une traduction de ce tutoriel Node.js .
Autres parties:
Partie 1
Partie 2
Partie 3
Partie 4
Obtenir les données saisies par l'utilisateur dans Node.js
Comment rendre un programme Node.js interactif?
Pour ce faire, la version 7 de Node.js introduit le module readline : il sert à récupérer les données d'un flux à lire, comme la
process.stdin
ligne de commande lors de l'exécution d'un programme Node.js.
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
readline.question(`What is your name?`, name => {
console.log(`Hi ${name}!`)
readline.close()
})
Ce code demande le nom d'utilisateur, après que l'utilisateur a tapé et cliqué
enter
, un message d'accueil s'affiche.
La méthode
question()
imprime le premier paramètre (question) sur la console et attend la réponse de l'utilisateur. Lorsqu'elle est enfoncée enter
, la fonction de rappel est exécutée.
Dans ce rappel, nous fermons l'interface
readline
.
readline
contient d'autres méthodes, que vous pouvez lire dans la documentation.
Si vous avez besoin de demander un mot de passe, il est préférable de ne pas le renvoyer explicitement, mais d'utiliser plutôt des symboles
*
.
Une façon de faire est d'utiliser le package readline-sync , qui est simple à comprendre et facile à configurer.
Une solution plus complète et abstraite est fournie par le package Inquirer.js .
Nous l'installons avec l'aide
npm install inquirer
et l'utilisons comme suit:
const inquirer = require('inquirer')
const questions = [
{
type: 'input',
name: 'name',
message: `What's your name?`
}
]
inquirer.prompt(questions).then(answers => {
console.log(`Hi ${answers['name']}!`)
})
Inquirer.js vous permet de faire beaucoup de choses intéressantes, comme suggérer plusieurs choix, fournir des boutons radio, demander une confirmation, etc.
Il est mieux connu comme une alternative aux solutions intégrées, mais si vous prévoyez de faire passer l'expérience utilisateur au niveau supérieur, Inquirer.js est la meilleure solution.
Extension de la fonctionnalité de fichier Node.js à l'aide de l'exportation
Node.js a un système modulaire intégré.
Le fichier Node.js peut importer des fonctionnalités à partir d'autres fichiers Node.js.
Lorsque vous souhaitez importer quelque chose, vous utilisez
const library = require('./library')
pour importer des fonctionnalités exportées dans un fichier
library.js
situé dans le répertoire actuel.
Dans ce fichier, les fonctionnalités doivent être exportées avant de pouvoir être importées dans un autre fichier.
Tout autre objet ou variable défini dans un fichier est par défaut privé (privé) et ne peut pas être utilisé dans d'autres fichiers.
C'est ce que nous permet de faire l'interface
module.exports
fournie par le système modulaire .
Lorsque vous affectez un objet ou une fonction en tant que nouvelle propriété de l'objet
exports
, vous les exportez, puis ils peuvent être importés ailleurs dans l'application ou dans une autre application.
Ceci peut être fait de deux façons.
La première consiste à attribuer une valeur
module.exports
, qui est l'objet par défaut fourni par le système modulaire. Cette méthode vous permet d'exporter uniquement cet objet:
const car = {
brand: 'Ford',
model: 'Fiesta'
}
module.exports = car
//
const car = require('./car')
La deuxième méthode consiste à ajouter l'objet exporté en tant que propriété de l'objet
exports
. Cette méthode vous permet d'exporter de nombreux objets, fonctions ou données:
const car = {
brand: 'Ford',
model: 'Fiesta'
}
exports.car = car
ou alors
exports.car = {
brand: 'Ford',
model: 'Fiesta'
}
Pour utiliser cet objet dans un autre fichier, vous devez créer un lien vers l'importation:
const items = require('./items')
items.car
ou
const car = require('./items').car
Quelle est la différence entre
module.exports
et exports
?
Le premier exporte l'objet référencé, le second une propriété de l'objet.
Une introduction au gestionnaire de packages npm
Introduction à npm
npm
Est le gestionnaire de packages Node.js par défaut.
En janvier 2017, npm possédait plus de 350000 packages, ce qui en faisait le plus grand référentiel de code dans un seul langage de programmation sur Terre, et vous pouvez être assuré qu'il existe des packages pour faire à peu près tout.
Tout a commencé par le téléchargement et la gestion des dépendances dans Node.js, mais bientôt cet outil a commencé à être activement utilisé dans le développement du côté client des applications.
npm
fait plusieurs choses.
Une alternative à npm est le fil .
Chargement
npm
gère le chargement des dépendances du projet.
Si un fichier existe dans le projet, le
package.json
lancement npm install
installera tout ce dont le projet a besoin dans le répertoire node_modules
créé s'il n'existe pas.
Un package spécifique peut être installé à l'aide de
npm install <package-name>
.
Souvent, l'installation d'un package est accompagnée de drapeaux:
- --save - installe le package et ajoute une entrée à ce sujet dans la section des dépendances du fichier
package.json
- --save-dev - installe le package et ajoute une entrée à ce sujet dans la section devDependencies du fichier
package.json
La principale différence est que devDependencies est utilisé à des fins de développement, par exemple pour les tests, et les dépendances sont utilisées en production (lors de la construction d'un projet).
Mise à jour des packages
La mise à jour est facile avec
npm update
.
npm
vérifiera tous les packages pour les nouvelles versions qui répondent aux restrictions établies.
Vous pouvez également mettre à jour un paquet spécifique:
npm update <package-name>
.
Gestion des versions
En plus des téléchargements standard, npm prend en charge le contrôle de version, vous pouvez donc spécifier n'importe quelle version spécifique d'un package ou demander une version plus récente ou plus ancienne.
Vous constaterez souvent qu'une bibliothèque n'est compatible qu'avec une certaine version (majeure) d'une autre bibliothèque.
Et aussi avec les bugs des dernières versions qui n'ont pas été corrigés depuis longtemps.
La gestion des versions facilite également le développement de l'équipe car chaque membre de l'équipe sait quelle version utiliser avant de mettre à jour le fichier
package.json
.
Dans tous ces cas, la gestion des versions aide; à cet égard,
npm
elle suit les normes acceptées.
Exécuter des tâches
package.json
prend en charge un format pour spécifier les commandes à exécuter dans le terminal avec npm run <task-name>
.
Par exemple:
{
"scripts": {
"start-dev": "node lib/server-development",
"start": "node lib/server-production"
},
}
Il est courant d'utiliser cette fonctionnalité pour exécuter Webpack:
{
"scripts": {
"watch": "webpack --watch --progress --colors --config webpack.conf.js",
"dev": "webpack --progress --colors --config webpack.conf.js",
"prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
},
}
Cela permet, au lieu d'un ensemble de commandes longues qui sont faciles à oublier ou qui sont faciles à faire des erreurs, faire ceci:
npm run watch
npm run dev
npm run prod
Où npm installe-t-il les packages?
Lors de l'installation de packages à l'aide de,
npm
vous pouvez choisir entre deux types d'installation:
- local
- global
Par défaut, lorsque vous saisissez
npm install
par exemple:
npm install lodash
le package est installé dans un dossier
node_modules
du répertoire actuel.
Après l'installation,
npm
ajoute un enregistrement o lodash
à la section dependencies
fichier package.json
du répertoire actuel.
Pour une installation globale, utilisez l'indicateur
-g
:
npm install -g lodash
Dans une installation globale, le package n'est pas installé dans le répertoire actuel, mais dans le répertoire global.
Mais où exactement?
Pour le déterminer, vous devez exécuter la commande
npm root -g
.
Sous macOS ou Linux, ce répertoire peut être
/usr/local/lib/node_modules
. Sous Windows - C:\Users\YOU\AppData\Roaming\npm\node_modules
. Ce répertoire peut être différent
lorsqu'il est utilisé
nvm
pour la gestion des versions de Node.js.
Comment utiliser les packages installés?
Comment utiliser un
node_modules
package installé dans un dossier ou globalement.
Supposons que vous ayez installé une
lodash
bibliothèque d'aide JavaScript populaire avec npm install lodash
.
Cette commande installera
lodash
dans un répertoire local node_modules
.
Pour utiliser le programme, vous devez importer le package en utilisant
require
:
const _ = require('lodash')
Que faire si le package est exécutable (fichier)?
Dans ce cas, le fichier exécutable sera placé dans le répertoire
node_modules/.bin/
.
Cela peut être facilement démontré à l'aide de la bibliothèque de cowsay .
Ce paquet fournit un programme en ligne de commande, lorsqu'il est exécuté, la vache (et les autres animaux) "parle" quelque chose.
Lors de l'installation d'un package via
npm install cowsay
, le package lui-même et plusieurs de ses dépendances seront installés:
Le dossier
.bin
est caché et contient des liens symboliques vers les données binaires cowsay:
Comment les exécuter?
Vous pouvez bien sûr taper
./node_modules/.bin/cowsay
et cela devrait fonctionner, mais npx inclus avec npm (depuis la version 5.2) est la meilleure option. Tu fais justenpx cowsay
et npx localisera automatiquement le fichier: La
vache dit "sortez-moi d'ici".
Manuel de Package.json
Lorsque vous travaillez avec JavaScript, lorsque vous interagissez avec un projet JavaScript, Node.js ou le front-end d'une application, vous rencontrerez probablement un fichier
package.json
.
Ce que c'est? Que devez-vous savoir sur lui? Et que pouvez-vous en faire?
package.json
Est une sorte de manifeste de projet. Il peut faire beaucoup de choses qui n'ont aucun rapport les unes avec les autres. Par exemple, il peut s'agir du fichier principal des paramètres des outils utilisés. Il stocke également les noms et les versions de tous les packages installés (ces informations sont utilisées npm
et yarn
).
Structure des fichiers
Voici un exemple
package.json
:
{}
Comme vous pouvez le voir, il est vide. Il
package.json
n'y a aucune exigence pour le contenu . La seule exigence est son format (JSON), sinon les programmes ne pourront pas y accéder.
Si vous créez un package Node.js que vous prévoyez de distribuer
npm
, la situation change radicalement et vous devez ajouter des propriétés pour aider d'autres personnes à utiliser le package. Nous examinerons cela plus tard.
Voici un autre exemple
package.json
:
"name": "test-project"
Ici, nous avons défini le nom du package ou de l'application situé dans le même répertoire que
package.json
.
Voici un exemple d'une application plus complexe
package.json
empruntée à une application Vue.js:
{
"name": "test-project",
"version": "1.0.0",
"description": "A Vue.js project",
"main": "src/main.js",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit",
"build": "node build/build.js"
},
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^21.0.2",
"babel-loader": "^7.1.1",
"babel-plugin-dynamic-import-node": "^1.2.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint-config-airbnb-base": "^11.3.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-import-resolver-webpack": "^0.8.3",
"eslint-loader": "^1.7.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-vue": "^4.0.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"jest": "^22.0.4",
"jest-serializer-vue": "^0.3.0",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-jest": "^1.0.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": ["> 1%", "last 2 versions", "not ie <= 8"]
}
Il y en a beaucoup ici:
name
- nom de l'application / du packageversion
- version application / packagedescription
- une brève description de l'application / du packagemain
- fichier principal (point d'entrée) de l'applicationprivate
- la valeurtrue
empêche la publication accidentelle de l'application ànpm
scripts
- un ensemble de scripts (commandes) qui peuvent être exécutés (exécutés)dependencies
- dépendances du projetdevDependencies
- dépendances du projet utilisées uniquement pendant le développementengines
- les versions sur lesquelles l'application / le package s'exécutebrowserlist
- navigateurs pris en charge (et leurs versions)
Toutes ces propriétés sont utilisées
npm
.
Propriétés
Dans cette section, nous parlerons de certaines des propriétés que vous pouvez utiliser. Nous utiliserons le terme «package», mais la plupart de ce qui a été dit est également vrai pour les applications.
La plupart des propriétés sont nécessaires pour publier le package
npm
, certaines pour interagir avec le package.
Nom nom)
Spécifie le nom du package.
Par exemple:
"name": "test-project"
Le nom ne doit pas dépasser 214 caractères, ne doit pas contenir d'espaces et ne peut être composé que de lettres minuscules (minuscules), de tirets (-) et de trait de soulignement (_).
En effet, une
npm
URL est attribuée au package lors de sa publication en fonction de son nom.
Si le package est publié sur GitHub, il est recommandé de créer un lien vers le référentiel.
Auteur
Identifie l'auteur du package.
Par exemple:
{
"author": "Joe <joe@whatever.com> (https://whatever.com)"
}
ou comme ça:
{
"author": {
"name": "Joe",
"email": "joe@whatever.com",
"url": "https://whatever.com"
}
}
Contributeurs
Spécifie un ou plusieurs contributeurs au package. Cette propriété est un tableau de chaînes.
Par exemple:
{
"contributors": ["Joe <joe@whatever.com> (https://whatever.com)"]
}
ou comme ça:
{
"contributors": [
{
"name": "Joe",
"email": "joe@whatever.com",
"url": "https://whatever.com"
}
]
}
les erreurs
Définit un lien vers un suivi des problèmes, généralement un suivi des problèmes sur GitHub.
Par exemple:
{
"bugs": "https://github.com/whatever/package/issues"
}
Page d'accueil
Définit l'adresse de la page d'accueil.
Par exemple:
{
"homepage": "https://whatever.com/package"
}
Version
Détermine la version actuelle du package.
Par exemple:
"version": "1.0.0"
Cette propriété suit la norme de gestion des versions sémantique. Cela signifie qu'il doit toujours être composé de trois nombres séparés par des points
x.x.x
.
Le premier numéro est la version majeure, le second est la version mineure, le troisième est le patch.
Chaque numéro a une signification spécifique: une mise à jour pour corriger les bogues est un correctif, une version de modifications rétrocompatibles est une version mineure et une version majeure peut signifier des modifications incompatibles avec la version précédente.
Licence
Spécifie la licence du package.
Par exemple:
"license": "MIT"
Mots clés
Cette propriété est un tableau de mots-clés associés au package.
Par exemple:
"keywords": [
"email",
"machine learning",
"ai"
]
Ils aident les gens à trouver des colis.
La description
Définit une brève description du package.
Par exemple:
"description": "A package to work with strings"
Lors de la publication d'un package dans une
npm
propriété donnée, cela aide les utilisateurs à comprendre à quoi il sert.
Dépôt
Détermine où se trouve le code source du package.
Par exemple:
"repository": "github:whatever/testing",
Faites attention au préfixe
github
. Il existe d'autres services similaires:
"repository": "gitlab:whatever/testing",
"repository": "bitbucket:whatever/testing",
Vous pouvez également définir un système de contrôle de version:
"repository": {
"type": "git",
"url": "https://github.com/whatever/testing.git"
}
Vous pouvez spécifier plusieurs systèmes de contrôle de version:
"repository": {
"type": "svn",
"url": "..."
}
principale
Définit le fichier principal (point d'entrée) du package.
Lors de l'importation d'un package dans une application, c'est dans ce fichier que l'application recherchera les modules exportés.
Par exemple:
"main": "src/main.js"
privé
La définition de cette propriété sur une valeur
true
empêche la publication accidentelle du package dans npm
.
Par exemple:
"private": true
scripts
Définit une liste de commandes (scripts) pouvant être exécutées (exécutées).
Par exemple:
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit",
"build": "node build/build.js"
}
Ces scripts sont des applications de ligne de commande. Vous pouvez les exécuter avec
npm run XXXX
ou yarn run XXXX
, où XXXX
est le nom de la commande. Par exemple: npm run dev
.
Vous pouvez utiliser n'importe quel nom comme nom de commande, le script fera tout ce que vous lui spécifiez.
Dépendances
Définit une liste de dépendances de package.
Lors de l'installation d'un package utilisant npm ou yarn:
npm install <PACKAGENAME>
yarn add <PACKAGENAME>
l'enregistrement de ce package sera automatiquement ajouté à la propriété en question.
Par exemple:
"dependencies": {
"vue": "^2.5.2"
}
devDependencies
Définit une liste de dépendances à des fins de développement.
Ils diffèrent de
dependencies
, car ils sont installés uniquement sur l'ordinateur du développeur et ne sont pas mis en production.
Lors de l'installation d'un package utilisant npm ou yarn:
npm install --save-dev <PACKAGENAME>
yarn add --save-dev <PACKAGENAME>
l'enregistrement le concernant est automatiquement ajouté à la propriété considérée.
Par exemple:
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1"
}
moteurs
Détermine les versions de Node.js ou d'autres outils sur lesquels le package / l'application s'exécute.
Par exemple:
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0",
"yarn": "^0.13.0"
}
liste de navigateurs
Définit une liste de navigateurs pris en charge (et leurs versions). Ces informations sont utilisées par Babel, Autoprefixer et d'autres outils pour créer des polyfills et assurer la compatibilité avec les navigateurs spécifiés.
Par exemple:
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
Ce paramètre signifie que vous souhaitez prendre en charge les deux dernières versions de tous les navigateurs que plus de 1% des utilisateurs utilisent selon les statistiques de CanIUse , à l'exception d'IE8 et des versions antérieures.
Propriétés spéciales
package.json
peut contenir des propriétés spéciales pour des outils comme Babel, ESLint, etc.
Chacun de ces outils a ses propres propriétés, par exemple
eslintConfig
, babel
et ainsi de suite. Pour plus de détails sur les propriétés spéciales, consultez la documentation correspondante.
Versions de package
Dans les exemples ci-dessus, vous avez probablement remarqué des entrées comme celle-ci:
~3.0.0
, ^0.13.0
. Que signifient-ils? Et quels autres spécificateurs de version puis-je utiliser?
Ces spécificateurs sont utilisés pour définir les conditions de mise à jour.
Les règles sont les suivantes:
~
- écrire~0.13.0
signifie que seules les mises à jour de correctifs sont autorisées, c'est-à-dire la libération est0.13.1
valide, mais la libération0.14.0
ne l' est pas^
- écrire^0.13.0
signifie que les correctifs et les mises à jour mineures sont autorisés*
- record*
signifie que toutes les mises à jour sont autorisées>
- toutes les nouvelles versions sont autorisées>=
- des versions similaires ou plus récentes sont autorisées<=
- des versions similaires ou antérieures sont acceptées<
- toutes les anciennes versions sont autorisées
Voici quelques règles supplémentaires:
- pas de caractère de début - seule la version spécifiée est autorisée
latest
- seule la dernière version est autorisée
Ces caractères peuvent être combinés de différentes façons, par exemple:
1.0.0 || >=1.1.0 <1.2.0
.
Merci de votre attention.
À suivre…