260 votes

Comment utiliser une importation es6 dans un noeud?

Je suis en train d'essayer d'obtenir le coup de l'es6 des importations dans le nœud et suis en train d'utiliser la syntaxe fournies dans cet exemple:

Triche Lien: https://hackernoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f

Je suis à la recherche par le biais de la table de support: http://node.green/, mais n'a pas été en mesure de trouver quelle version prend en charge les nouvelles déclarations d'importation (j'ai essayé de regarder pour l'importation de texte/besoin), je suis actuellement en cours d'exécution nœud 8.1.2 et croire aussi que, depuis la triche fait référence .js fichiers, il doit travailler avec .js fichiers.

Comme je l'ai exécuter le code (prises de triche du 1er exemple):

import { square, diag } from 'lib';

J'obtiens l'erreur: SyntaxError: Unexpected token d'importation.

Référence à la lib, je suis en train d'importer:

//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

Ce qui me manque et comment puis-je obtenir nœud de reconnaître mon instruction d'importation?

189voto

tbking Points 2043

Node.js a inclus un support expérimental pour ES6 soutien. Lire plus ici: https://nodejs.org/api/esm.html.

TLDR; Enregistrer le fichier avec l'ES6 modules avec .mjs d'extension et de l'exécuter comme:

node --experimental-modules my-app.mjs

Node.js ne prend pas en charge ES6 modules. Ce blog par James décrit les raisons pour lesquelles il. Si vous pouvez utiliser Babel à utiliser ES6 modules de syntaxe.

185voto

Seunope Points 1441

Vous pouvez également utiliser npm paquet appelé mes qui vous permet d'utiliser ES6 modules dans le nœud. Il n'a pas besoin de configuration. Avec mes, vous serez en mesure d'utiliser à l'exportation/importation de vos fichiers JS.

Exécutez la commande suivante dans votre terminal

yarn add esm 

ou

npm install esm

Après cela, vous devez vous demander ce paquet lors du démarrage de votre serveur avec le noeud. Par exemple, si votre serveur de nœud s'exécute index.js fichier, vous pouvez utiliser la commande

node -r esm index.js

Vous pouvez également l'ajouter dans votre forfait.fichier json comme ceci

{
  "name": "My-app",
  "version": "1.0.0",
  "description": "Some Hack",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node -r esm index.js"
  },

}

Ensuite, exécutez cette commande dans le terminal pour lancer votre serveur de noeud

npm start

Vérifier ce lien pour plus de détails

124voto

Perdu environ 3 heures.

Je voulais juste utiliser l' import et export dans les fichiers js.

Tout le monde dit de ne pas possible. Mais, en Mai 2018, il est possible de l'utiliser au-dessus de la plaine node.js sans aucune modules comme babel, etc.

Voici une façon simple de le faire.

Créer ci-dessous des fichiers, d'exécuter et voir le résultat par vous-même.

Aussi, ne pas oublier de voir Explanation ci-dessous.

myfile.mjs

function myFunc() {
    console.log("Hello from myFunc")
}

export default myFunc;

index.mjs

import myFunc from "./myfile"  // this is our myfile.mjs

myFunc();

exécuter

node  --experimental-modules  index.mjs

sortie

(node:12020) ExperimentalWarning: The ESM module loader is experimental.

Hello from myFunc

Explication:

  1. Depuis c'est expérimental modules .js fichiers sont nommés .mjs fichiers
  2. Lors de l'exécution, vous ajouterez --experimental-modules de la node index.mjs
  3. Lors de l'exécution avec les modules expérimentaux dans la sortie, vous verrez: "(noeud:12020) ExperimentalWarning: Le MES chargeur de module est expérimental. "
  4. J'ai la version actuelle de node js, donc si j'exécute node --version, il me donne "v10.3.0", bien que le LTE/stable/version recommandée est 8.11.2 LTS.
  5. Un jour, dans le futur, vous pourriez utiliser .js au lieu de .mjs, comme les fonctionnalités que vous devenir stable au lieu de l'Expérimentale.
  6. Plus sur les fonctionnalités expérimentales, voir: https://nodejs.org/api/esm.html

Espérons que cela a aidé.

 

20voto

Zardoz Points 264

Si vous utilisez les modules du système sur le côté serveur, vous n'avez pas besoin d'utiliser Babel à tous. Pour utiliser les modules NodeJS veiller à ce que:

  1. Utiliser une version de nœud qui prend en charge l' --expérimental-modules drapeau
  2. Votre .js fichiers doivent ensuite être renommé .mjs

C'est tout.

Cependant, et c'est un gros cependant, même si vos shinny pur ES6 code sera exécuté dans un environnement comme NodeJS (à l'écriture 9.5.0) vous avez toujours de la folie de la transpilling juste pour tester. Aussi garder à l'esprit que l'Ecma a déclaré que la libération des cycles de Javascript va être plus rapide, avec de nouvelles fonctionnalités livrées sur une base plus régulière. Tandis que ce sera pas de problèmes pour le seul environnements comme NodeJS, son légèrement différent pour le navigateur environnements. Ce qui est clair est que l'analyse des cadres ont beaucoup à faire pour rattraper. Vous devrez probablement transpile pour les infrastructures de test. Je suggérerais à l'aide de la plaisanterie.

Également être conscients de regroupement des cadres, vous allez avoir des problèmes

14voto

Losses Don Points 1

Vous pouvez essayer esm .

Voici quelques introduction: https://www.npmjs.com/package/esm

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