63 votes

configuration dactylographique recommandée pour le noeud 8

Qu'est-ce que la config recommandé pour la machine si je veux de l'ue les sources compilées avec le nœud 8?

la plupart des tutoriels d'utilisation suivantes tsconig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}

Mais maintenant j'ai compris, que pas toutes les fonctionnalités disponibles sont pris en charge. Par exemple ['foo'].includes('bar') génère l'erreur: la Propriété 'comprend' n'existe pas sur le type " string[]'.

J'ai trouvé un problème à traiter ce problème. La solution est d'utiliser la lib es7. Je pourrais remplacer la valeur par défaut libs: "lib": ["es7"]

Mais je ne suis pas sûr si c'est la meilleure config pour le nœud 8 - il y a plus de fonctionnalités qui ne sont pas pris en charge par cette lib? sont là pour beaucoup de caractéristiques définies?

Donc ma question est: Quelles sont les meilleures configurations pour target, lib et module si je veux utiliser le nœud 8?

116voto

Linus Unnebäck Points 1855

Comme d'Node.js 8.10.0, 100% de ES2017 est pris en charge. Si vous savez que vous êtes ne ciblant que cette version ou une version plus récente, la meilleure config devrait ressembler à ceci:

  • "module": "commonjs"

    Node.js est sur son chemin pour ajouter de l'ES-Modules, mais pour l'instant nous allons avoir à coller avec CommonJS.

  • "target": "es2017"

    Cela indique à la Machine qu'il est bon de sortie JavaScript syntaxe avec des fonctionnalités de ES2017. Dans la pratique, cela signifie qu'il sera par exemple la sortie async/await , au lieu de l'incorporation d'un polyfill (__awaiter).

  • "lib": ["es2017"]

    Cela indique à la Machine qu'il est correct d'utiliser les fonctions et les propriétés introduites dans ES2017 ou plus tôt. Dans la pratique, cela signifie que vous pouvez utiliser, par exemple, Array.prototype.includes et String.prototype.padStart.

Le plein de config serait donc:

{
  "compilerOptions": {
    "lib": ["es2017"],
    "module": "commonjs",
    "target": "es2017"
  }
}

5voto

Robula Points 432

Je suis sûr que vous avez déjà trouvé cela, mais il est Microsoft starter modèle ici: https://github.com/Microsoft/TypeScript-Node-Starter

Pendant que vous êtes encore sur le Nœud 8.x, gardez votre module ensemble de commonjs, target peut es6.

compilerOptions.lib seulement définit quelles déclarations par le compilateur pour compiler des contrôles, il n'affecte pas la sortie de l' tsc. En d'autres termes, vous pouvez utiliser n'importe quel lib que vous voulez et vous inquiétez pas que votre transpiled code sera toute différente (ce qui est entièrement contrôlé par l' compilerOptions.target).

À l'aide de es7 comme lib dans votre cas sera très bien et vous donnera les déclarations de type de ES7 et de la vertu.

Array.includes est ES7 (ES2016) et, par conséquent, comme vous l'avez découvert n'est pas une partie de l' ES6. Vous pouvez définir votre lib que lib: ["es6", "ES2016.Array.Include"] à obtenir autour de votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X