web-dev-qa-db-ja.com

「fs」からインポートfsを使用する

JavaScriptでimport fs from 'fs'を使用したい。サンプルを次に示します。

import fs from 'fs'

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

console.log(output)

node main.jsを使用してファイルを実行するとエラーが発生します:

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

他の場所からモジュールと機能をインポートするには、ノードに何をインストールする必要がありますか?

37
birdybird03

ES6モジュールのサポート node.jsのかなり最近のものです。最先端のバージョンでも、まだ実験段階です。ノード10を使用すると、--experimental-modulesフラグを使用してノードを開始でき、おそらく機能します。

古いノードバージョンまたは標準ノード10でインポートするには、CommonJS構文を使用します。

const fs = require('fs');
38
phihag

デフォルトのエクスポートでは、次を使用する必要があります。

import * as fs from 'fs';

または、モジュールがexportsという名前を付けている場合:

import {fs} from 'fs';

例:

//module1.js

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

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

export default function1;

その後:

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

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

さらに、es6 importを使用できるようにするにはwebpackまたは類似のものを使用する必要があります。

52
RobertoNovelo

import { readFileSync } from 'fs'を使用するには、以下を行う必要があります。

  1. node 10+を使用している
  2. --experimental-modulesフラグ(ノード10)を使用します。 node --experimental-modules server.mjs(.mjsの説明については#3を参照)
  3. importステートメントを使用してファイルのファイル拡張子の名前を.mjsに変更すると、。jsは機能しません。 server.mjs

他の回答は1と2にヒットしますが、3も必要です。また、この機能はこの時点では非常に実験的であり(1/10の安定性)、生産には推奨されていませんが、おそらく引き続き使用することに注意してください。

ノード10 ESMドキュメント

11
nomis

RobertoNoveloの答えに基づいて:

import * as fs from 'fs';

現在、これを行う最も簡単な方法です。

Esm( https://github.com/standard-things/esm#readme )を使用してimportを使用できるようにするノードプロジェクト(ノードv10.15.3)でテストしました。

2
Yoann

新しいECMAScriptモジュールのサポートは、Node.js 12でネイティブにサポートされていますか????

昨日(2019-04-23)リリースされたため、フラグ--experimental-modulesを使用する必要はありません。

詳細については、 http://2ality.com/2019/04/nodejs-esm-impl.html

1
José Silva

TypeScriptを使用している場合、ターミナル/コマンドプロンプトからコマンドnpm install @ types/nodeを実行して、タイプ定義ファイルを更新できます。

0
Rajkumar Peter