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.
function myFunc() { console.log("Hello from myFunc") } export default myFunc;
import myFunc from "./myfile" myFunc();
node --experimental-modules index.mjs
(node:12020) ExperimentalWarning: The ESM module loader is experimental. Hello from myFunc
Explication:
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:
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');
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.