Использование импорта 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'
, вам необходимо:
- Используй
node 10+
- Используйте флаг
--experimental-modules
(в узле 10), например, узел --experimental-modules server.mjs (объяснение .mjs см. В №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/