使用来自‘ fs’的 import 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

我应该在 Node.js 中安装什么来实现从其他地方导入模块和功能?

279567 次浏览

对于默认导出,您应该使用:

import * as fs from 'fs';

或者在模块已命名为 export 的情况下:

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

在 Node.js 中支持 的 ES6模块是相当新的; 即使在最前沿的版本中,它仍处于试验阶段。使用 Node.js 10,您可以使用 --experimental-modules标志启动 Node.js,它很可能会工作。

要导入旧版本的 Node.js 或标准 Node.js 10,请使用 CommonJS语法:

const fs = require('fs');

目前还不支持... ... 如果你想使用它,你必须安装 巴别塔

要使用 import { readFileSync } from 'fs',你必须:

  1. 使用 Node.js 10或更高版本
  2. 使用 --experimental-modules标志(在 Node.js 10中) ,例如 node --experimental-modules server.mjs(请参阅 # 3对. mjs 的解释)
  3. 使用 import语句将文件的文件扩展名重命名为 .mjs.js will not work,例如 server.mjs

其他的答案是1和2,但是3也是必要的。此外,请注意,这个特性被认为是非常实验性的(1/10稳定性) ,不推荐用于生产,但我仍然可能使用它。

这是 Js 10 ESM 文档

新的 ECMAScript 模块支持可以在 Node.js 12中实现

它是在2019-04-23发布的,这意味着没有必要使用 --experimental-modules标志。

了解更多:

Js 12中新的 ECMAScript 模块支持

Building on RobertoNovelo's answer:

import * as fs from 'fs';

是目前最简单的方法。

使用 Node.js 项目(Node.js v10.15.3)和 Esm对它进行了测试,允许使用 import

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.

转到 package.json 文件并添加:

"type": "module"

这招对我管用!

朋友节点 js 使用 commonjs 而不是 modaljs 所以使用总是使用 Const fs = need (‘ fs’) for file system if we use modaljs import fs from‘ fs’ 它给出了错误的结论 从“ fs”导入{ fs } ; ^^^^^^ SyntaxError: 不能在模块外使用 import 语句

如果您希望您的语句 import fs from‘ fs’是可执行的,那么您可以创建您的文件扩展名。而不是 MJ。JS. 即 filename.mjs