Je veux utiliser import fs from 'fs'
en JavaScript. Voici un échantillon:
import fs from 'fs'
var output = fs.readFileSync('someData.txt')
console.log(output)
L'erreur que je reçois lorsque j'exécute mon fichier avec node main.js
est la suivante:
(function (exports, require, module, __filename, __dirname) { import fs from 'fs
'
^^^^^^
SyntaxError: Unexpected token import
Que dois-je installer dans le noeud pour pouvoir importer des modules et des fonctions depuis d'autres emplacements?
support des modules ES6 dans node.js est assez récent; même dans les versions bleeding-edge, il est encore expérimental. Avec le nœud 10, vous pouvez démarrer le nœud avec l’indicateur --experimental-modules
, et cela fonctionnera probablement.
Pour importer sur des versions de noeud antérieures - ou sur le noeud standard 10 -, utilisez la syntaxe CommonJS:
const fs = require('fs');
Pour les exportations par défaut, vous devez utiliser:
import * as fs from 'fs';
Ou si le module a nommé exports:
import {fs} from 'fs';
Exemple:
//module1.js
export function function1() {
console.log('f1')
}
export function function2() {
console.log('f2')
}
export default function1;
Puis:
import defaultExport, { function1, function2 } from './module1'
defaultExport(); // This calls function1
function1();
function2();
De plus, vous devriez utiliser webpack ou quelque chose de similaire pour pouvoir utiliser es6 import
Pour utiliser import { readFileSync } from 'fs'
, vous devez:
node 10+
--experimental-modules
(dans le noeud 10), par exemple. noeud --experimental-modules server.mjs (voir # 3 pour l'explication de .mjs)import
, en .mjs
, . Js ne fonctionnera pas , par exemple. serveur.mjsLes autres réponses portent sur 1 et 2, mais 3 est également nécessaire. Notez également que cette fonctionnalité est considérée comme extrêmement expérimentale à ce stade (stabilité au 1/10) et qu’elle n’est pas recommandée pour la production, mais je l’utiliserai probablement encore.
Voici le documentation du noeud 10 ESM
S'appuyant sur la réponse de RobertoNovelo:
import * as fs from 'fs';
est actuellement le moyen le plus simple de le faire.
Testé avec un projet de noeud (noeud v10.15.3), avec esm ( https://github.com/standard-things/esm#readme ) permettant d'utiliser import
.
Le nouveau support du module ECMAScript est capable nativement dans Node.js 12 ????
Il a été publié hier (2019-04-23) et cela signifie qu'il n'est pas nécessaire d'utiliser le drapeau --experimental-modules
.
Pour en savoir plus à ce sujet: http://2ality.com/2019/04/nodejs-esm-impl.html
Si nous utilisons TypeScript, nous pouvons mettre à jour le fichier de définition de type en exécutant la commande npm install @ types/node à partir de l'invite terminal/command.