92 votes

Utilisation de fs importé de 'fs'.

Je veux utiliser import fs from 'fs' en JavaScript. Voici un exemple :

import fs from 'fs'

var output = fs.readFileSync('someData.txt')

console.log(output)

L'erreur que j'obtiens lorsque j'exécute mon fichier à l'aide de la fonction node main.js est :

(function (exports, require, module, __filename, __dirname) { import fs from 'fs
'
                                                              ^^^^^^
SyntaxError: Unexpected token import

Que dois-je installer dans Node.js afin de pouvoir importer des modules et des fonctions depuis d'autres endroits ?

1 votes

Un transpileur. Ou la prochaine version du nœud du futur.

0 votes

Regardez ma réponse pour le faire fonctionner !

0 votes

Alors que le nœud 14 permet (par exemple) import fs from 'fs/promises' sur les versions antérieures, vous devrez créer un alias en utilisant la syntaxe import { promises as fs } from syntax

119voto

RobertoNovelo Points 116

Pour les exportations par défaut, vous devez utiliser :

import * as fs from 'fs';

Ou dans le cas où le module a des exportations nommées :

import {fs} from 'fs';

Exemple :

//module1.js

export function function1() {
  console.log('f1')
}

export function function2() {
  console.log('f2')
}

export default function1;

Et puis :

import defaultExport, { function1, function2 } from './module1'

defaultExport();  // This calls function1
function1();
function2();

En outre, vous devez utiliser Webpack ou quelque chose de similaire pour pouvoir utiliser ES6 import

8 votes

Cela ne fonctionne pas car fs n'a pas d'exportation par défaut ni d'exportation nommée "fs". import fs from "fs"; est la syntaxe correcte.

0 votes

Comment cette réponse incorrecte peut-elle avoir autant de votes positifs ? Veuillez mettre à jour cette réponse conformément au commentaire de @KonradHöffner ci-dessus.

0 votes

Les API asynchrones et de rappel @rinogo sont importées par l'intermédiaire de import * as fs from 'fs'; et les API basées sur les promesses via import * as fs from 'fs/promises'; . fs prend en charge la syntaxe CommonJS et les modules ES6. Pouvez-vous fournir un exemple d'utilisation avec import fs from "fs"; ? Par ailleurs, le reste de la réponse n'est qu'un exemple de la manière dont vous pouvez exporter/importer des fonctions et des valeurs par défaut.

73voto

phihag Points 89765

Support des modules ES6 dans Node.js est assez récente ; même dans les versions les plus récentes, elle est encore expérimentale. Avec Node.js 10, vous pouvez démarrer Node.js avec la commande --experimental-modules et cela fonctionnera probablement.

Pour importer sur des versions plus anciennes de Node.js - ou sur Node.js 10 standard - utilisez CommonJS la syntaxe :

const fs = require('fs');

7 votes

La réponse de RobertoNovelo serait le meilleur choix si vous voulez vraiment utiliser les importations ES6.

0 votes

Vous pouvez utiliser --experimental-modules à partir du nœud v8.5. nodejs.org/docs/latest-v8.x/api/esm.html

29voto

nomis Points 187

Afin d'utiliser import { readFileSync } from 'fs' vous devez le faire :

  1. Utiliser Node.js 10 ou supérieur
  2. Utilisez le --experimental-modules (dans Node.js 10), par exemple. node --experimental-modules server.mjs (voir #3 pour l'explication de .mjs)
  3. Renommez l'extension de votre fichier avec l'option import les déclarations, pour .mjs , .js ne fonctionnera pas , par exemple server.mjs

Les autres réponses portent sur les points 1 et 2, mais le point 3 est également nécessaire. Notez également que cette fonctionnalité est considérée comme extrêmement expérimentale à ce stade (stabilité 1/10) et n'est pas recommandée pour la production, mais je l'utiliserai quand même probablement.

Voici le Documentation sur l'ESM de Node.js 10 .

20voto

Yoann Points 1

Dans le prolongement de la réponse de RobertoNovelo :

import * as fs from 'fs';

est actuellement le moyen le plus simple de le faire.

Il a été testé avec un projet Node.js (Node.js v10.15.3), avec esm permettant d'utiliser import .

1 votes

J'ai la v10.16.0 et cela ne fonctionne pas pour moi donnant une erreur- unexpected token *

1voto

José Silva Points 71

Le nouveau support des modules ECMAScript est possible nativement dans Node.js 12

Il a été publié le 2019-04-23 et signifie qu'il n'est pas nécessaire d'utiliser le drapeau --experimental-modules .

Pour en savoir plus :

Le nouveau support des modules ECMAScript dans Node.js 12

2 votes

Ce n'est pas vrai, dans le nœud v12.11.1 le drapeau est toujours requis.

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