Comment puis-je utiliser une importation es6 dans le noeud?

J’essaie d’obtenir le blocage des importations es6 dans le noeud et j’essaie d’utiliser la syntaxe fournie dans cet exemple:

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

Je suis en train de regarder à travers la table de support: http://node.green/ , mais je n’ai pas pu trouver quelle version supporte les nouvelles instructions d’importation (j’ai essayé de chercher l’importation / la demande de texte). J’exécute actuellement le noeud 8.1. 2 et crois également que puisque la feuille de sortingche fait référence aux fichiers .js, elle devrait fonctionner avec les fichiers .js.

En exécutant le code (extrait du premier exemple de Cheatsheet):

import { square, diag } from 'lib'; 

Je reçois l’erreur: SyntaxError: Importation de jeton inattendue.

Référence à la lib que j’essaye 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)); } 

Que manque-t-il et comment puis-je obtenir un noeud pour reconnaître ma déclaration d’importation?

Node.js a inclus un support expérimental pour le support ES6. En savoir plus sur ici: https://nodejs.org/api/esm.html .

TLDR; Enregistrez le fichier avec les modules ES6 avec l’extension .mjs et exécutez-le comme .mjs :

 node --experimental-modules my-app.mjs 

Node.js ne supporte pas les modules ES6. Ce blog de James en décrit les raisons. Bien que vous puissiez utiliser Babel pour utiliser la syntaxe des modules ES6.

Gaspillé environ 3 heures.

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

Tout le monde dit pas possible. Mais, à partir de mai 2018, il est possible d’utiliser ci-dessus en plain node.js, sans aucun module comme babel, etc.

Voici un moyen simple de le faire.

Créez les fichiers ci-dessous, exécutez-les et consultez les résultats par vous-même.

N’oubliez pas non plus de voir l’ Explanation ci-dessous.

myfile.mjs

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

index.mjs

 import myFunc from "./myfile" myFunc(); 

courir

 node --experimental-modules index.mjs 

sortie

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

Explication:

  1. Comme ce sont des modules expérimentaux, les fichiers .js sont nommés fichiers .mjs
  2. En cours d’exécution, vous appendez “–experimental-modules” au “node index.js”
  3. En cours d’exécution avec des modules expérimentaux dans la sortie, vous verrez: “(node: 12020) ExperimentalWarning: le chargeur de module ESM est expérimental.”
  4. J’ai la version actuelle du noeud js, donc si je lance “node –version”, cela me donne “v10.3.0”, bien que la version LTE / stable / recommandée soit 8.11.2 LTS.
  5. Un jour plus tard, vous pourriez utiliser .js au lieu de .mjs, car les fonctionnalités deviendront stables au lieu de Experimental.
  6. Plus d’informations sur les fonctionnalités expérimentales, voir: https://nodejs.org/api/esm.html

J’espère que ça a aidé.

Si vous utilisez le système de modules côté serveur, vous n’avez pas besoin d’utiliser Babel. Pour utiliser des modules dans NodeJS, assurez-vous que:

  1. Utilisez une version de noeud qui prend en charge l’ indicateur –experimental-modules
  2. Vos fichiers .js doivent ensuite être renommés en .mjs

C’est tout.

Cependant, et ceci est un gros problème, alors que votre code ES6 pur et shiny s’exécutera dans un environnement tel que NodeJS (en écrivant 9.5.0), vous aurez toujours la folie de transpercer juste pour tester. Gardez également à l’esprit qu’Ecma a déclaré que les cycles de publication de Javascript seront plus rapides, avec de nouvelles fonctionnalités plus régulières. Bien que cela ne pose aucun problème pour les environnements simples tels que NodeJS, il s’agit d’une proposition légèrement différente pour les environnements de navigateur. Ce qui est clair, c’est que les frameworks de test ont beaucoup à faire pour rattraper leur retard. Vous devrez probablement continuer à effectuer des tests pour les frameworks. Je suggère d’utiliser la plaisanterie.

Sachez également que les frameworks de bundling, vous allez rencontrer des problèmes là-bas

Retour à la question originale de Jonathan002 à propos de

“… quelle version prend en charge les nouvelles instructions d’importation ES6?”

Sur la base de l’ article du Dr Axel Rauschmayer , il est prévu de le prendre en charge par défaut (sans l’indicateur de ligne de commande expérimental) dans LTS Node.js 10.x. Selon le plan de publication de node.js tel qu’il est le 29/3/2018, il devrait être disponible après avril 2018, tandis que le LTS débutera en octobre 2018.

Vous pouvez essayer esm .

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

Solution

https://www.npmjs.com/package/babel-register

 // this is to allow ES6 export syntax // to be properly read and processed by node.js application require('babel-register')({ presets: [ 'env', ], }); // after that any line you add below that has typical es6 export syntax // will work just fine const utils = require('../../utils.js'); const availableMixins = require('../../../src/lib/mixins/index.js'); 

ci-dessous est la définition de mixins / index.js

 export { default as FormValidationMixin } from './form-validation'; // eslint-disable-line import/prefer-default-export 

Cela fonctionnait très bien dans mon application CLI node.js.