javascript - fs'i 'fs' modülünden import etmek


JavaScript'te import fs from 'fs' kullanmak istiyorum. İşte bir örnek:

import fs from 'fs'

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

console.log(output)

Dosyamı node main.js kullanarak çalıştırdığımda aldığım hata şudur:

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

Diğer yerlerden modülleri ve fonksiyonları ithal edebilmek için Node.js'e ne yüklemeliyim?

Cevap #1

Varsayılan ihracatlar için şunu kullanmalısınız:

import * as fs from 'fs';

Veya modülün isimlendirilmiş ihracatlara sahip olması durumunda:

import {fs} from 'fs';

Örnek :

//module1.js

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

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

export default function1;

Ve sonra:

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

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

Ayrıca, ES6 import kullanabilmek için Webpack veya benzeri bir şey kullanmalısınız

Cevap #2

Node.js'de ES6 modülleri desteği oldukça yenidir; en son sürümlerde bile hala deneysel durumdadır. Node.js 10 ile, Node.js'i --experimental-modules bayrağı ile başlatabilirsiniz ve muhtemelen çalışacaktır.

Eski Node.js sürümlerinde veya standart Node.js 10'da içe aktarmak için CommonJS sözdizimini kullanın:

const fs = require('fs');

Cevap #3

RobertoNovelo'nun cevabı üzerine inşa ederek:

import * as fs from 'fs';

şu anda bunu yapmanın en basit yolu.

Bir Node.js projesi (Node.js v10.15.3) ile test edildi, esm ile, import kullanılmasına izin veriyor.

Cevap #4

import { readFileSync } from 'fs' kullanabilmek için şunları yapmalısınız:

  1. Node.js 10 veya daha yeni bir sürümü kullanıyor olmak
  2. --experimental-modules bayrağını kullanın (Node.js 10'da), örn. node --experimental-modules server.mjs (.mjs açıklaması için bkz. #3)
  3. Dosyanızdaki import ifadeleri bulunan dosyanın dosya uzantısını .mjs olarak değiştirin, .js çalışmaz, örn. server.mjs

Diğer cevaplar 1 ve 2'yi vurguladı, ama 3 de gerekli. Ayrıca, bu özelliğin şu anda son derece deneysel (1/10 kararlılık) olarak değerlendirildiğini ve üretim için önerilmediğini not edin, ama yine de muhtemelen kullanacağım.

İşte Node.js 10 ESM dokümantasyonu.

Cevap #5

package.json dosyasına gidin ve şunu ekleyin:

"type": "module"

Bu benim için işe yaradı!

Cevap #6

2023 yılı, Mevcut sürümde node 16+:

import {readFileSync} from "fs"

const string_output = readFileSync("path-to-file", 'utf8')
// the rest

İkinci argümanı, 'utf8' kodlamasını vermezseniz, ikili bir dosya döndürecektir

İlgili makaleler