Использование импорта fs из 'fs'

Я хочу использовать import fs from 'fs' в JavaScript. Вот пример:

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

Что мне нужно установить в node, чтобы добиться импорта модулей и функций из других мест?

Ответ 1

Поддержка модулей ES6 в node.js появилась довольно недавно; даже в самых передовых версиях это все еще экспериментально. С узлом 10 вы можете запустить узел с --experimental-modules, и он, вероятно, будет работать.

Для импорта на более старых версиях узла - или на стандартном узле 10 - используйте синтаксис CommonJS:

const fs = require('fs');

Ответ 2

Для экспорта по умолчанию вы должны использовать:

import * as fs from 'fs';

Или в случае, если модуль назвал экспорт:

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();

Кроме того, вы должны использовать веб-пакет или что-то подобное, чтобы иметь возможность использовать import ES6

Ответ 3

Чтобы использовать import { readFileSync } from 'fs', вам необходимо:

  1. Используй node 10+
  2. Используйте флаг --experimental-modules (в узле 10), например, узел --experimental-modules server.mjs (объяснение .mjs см. В №3)
  3. Переименуйте расширение вашего файла с помощью операторов import в .mjs,.js не будет работать, например, server.mjs

Другие ответы касаются 1 и 2, но 3 также необходимо. Кроме того, обратите внимание, что эта функция считается чрезвычайно экспериментальной в данный момент (стабильность 1/10) и не рекомендуется для производства, но я все еще, вероятно, буду ее использовать.

Здесь узел 10 документации ESM

Ответ 4

Поддержка нового модуля ECMAScript изначально поддерживается в Node.js. 12

Это было выпущено вчера (2019-04-23), и это означает, что нет необходимости использовать флаг --experimental-modules.

Чтобы узнать больше об этом: http://2ality.com/2019/04/nodejs-esm-impl.html

Ответ 5

Опираясь на RobertoNovelo ответ:

import * as fs from 'fs';

В настоящее время это самый простой способ сделать это.

Протестировано с проектом узла (узел v10.15.3), с esm (https://github.com/standard-things/esm#readme), позволяющим использовать import.

Ответ 6

Если мы используем TypeScript, мы можем обновить файл определения типа, выполнив команду npm install @types/node из терминала/командной строки.

Ответ 7

Это еще не поддерживается. Если вы хотите использовать, вам придется установить babel

https://babeljs.io/docs/setup/