Reputation: 2521
I want to use import fs from 'fs'
in JavaScript. Here is a sample:
import fs from 'fs'
var output = fs.readFileSync('someData.txt')
console.log(output)
The error I get when I run my file using node main.js
is:
(function (exports, require, module, __filename, __dirname) { import fs from 'fs
'
^^^^^^
SyntaxError: Unexpected token import
What should I install in Node.js in order to achieve importing modules and functions from other places?
Upvotes: 181
Views: 475065
Reputation: 1830
It is 2023, In the current version node 16+:
import {readFileSync} from "fs"
const string_output = readFileSync("path-to-file", 'utf8')
// the rest
If you do not give the second argument, encoding 'utf8', it will return a binary file
Upvotes: 10
Reputation: 45
If you want your statement import fs from 'fs' to be executable, you can make your file extension .mjs instead of .js. i.e filename.mjs
Upvotes: 1
Reputation: 19
hey friends node js use commonjs not modaljs so use alawys use const fs = require('fs') for file system if we use modaljs import fs from 'fs' its give error se in termile import {fs} from 'fs'; ^^^^^^ SyntaxError: Cannot use import statement outside a module
Upvotes: -2
Reputation: 167
Go to package.json file and add:
"type": "module"
This worked for me!
Upvotes: 11
Reputation: 939
If we are using TypeScript, we can update the type definition file by running the command npm install @types/node
from the terminal or command prompt.
Upvotes: 3
Reputation: 741
Building on RobertoNovelo's answer:
import * as fs from 'fs';
is currently the simplest way to do it.
It was tested with a Node.js project (Node.js v10.15.3), with esm, allowing to use import
.
Upvotes: 59
Reputation: 401
The new ECMAScript module support is able natively in Node.js 12 🎉
It was released on 2019-04-23 and it means there is no need to use the flag --experimental-modules
.
To read more about it:
The new ECMAScript module support in Node.js 12
Upvotes: 0
Reputation: 1574
In order to use import { readFileSync } from 'fs'
, you have to:
--experimental-modules
flag (in Node.js 10), e.g. node --experimental-modules server.mjs
(see #3 for explanation of .mjs)import
statements, to .mjs
, .js will not work, e.g. server.mjsThe other answers hit on 1 and 2, but 3 is also necessary. Also, note that this feature is considered extremely experimental at this point (1/10 stability) and not recommended for production, but I will still probably use it.
Here's the Node.js 10 ESM documentation.
Upvotes: 43
Reputation: 4011
It's not supported just yet... If you want to use it you will have to install Babel.
Upvotes: -1
Reputation: 3819
For default exports you should use:
import * as fs from 'fs';
Or in case the module has named exports:
import {fs} from 'fs';
Example:
//module1.js
export function function1() {
console.log('f1')
}
export function function2() {
console.log('f2')
}
export default function1;
And then:
import defaultExport, { function1, function2 } from './module1'
defaultExport(); // This calls function1
function1();
function2();
Additionally, you should use Webpack or something similar to be able to use ES6 import
Upvotes: 224
Reputation: 288140
ES6 modules support in Node.js is fairly recent; even in the bleeding-edge versions, it is still experimental. With Node.js 10, you can start Node.js with the --experimental-modules
flag, and it will likely work.
To import on older Node.js versions - or standard Node.js 10 - use CommonJS syntax:
const fs = require('fs');
Upvotes: 75