web-dev-qa-db-fra.com

Utilisation de fs import depuis 'fs'

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?

37
birdybird03

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');
38
phihag

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

52
RobertoNovelo

Pour utiliser import { readFileSync } from 'fs', vous devez:

  1. Utilisez node 10+
  2. Utilisez l'indicateur --experimental-modules (dans le noeud 10), par exemple. noeud --experimental-modules server.mjs (voir # 3 pour l'explication de .mjs)
  3. Renommez l'extension de fichier de votre fichier avec les instructions import, en .mjs, . Js ne fonctionnera pas , par exemple. serveur.mjs

Les 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

11
nomis

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.

2
Yoann

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

1
José Silva

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.

0
Rajkumar Peter