使用'fs'中的导入fs

bir*_*d03 40 javascript es6-modules

我想import fs from 'fs'在JavaScript中使用.这是一个示例:

import fs from 'fs'

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

console.log(output)
Run Code Online (Sandbox Code Playgroud)

我运行文件时遇到的错误node main.js是:

(function (exports, require, module, __filename, __dirname) { import fs from 'fs
'
                                                              ^^^^^^
SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)

我应该在节点中安装什么才能从其他地方导入模块和功能?

Rob*_*elo 60

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

import * as fs from 'fs';
Run Code Online (Sandbox Code Playgroud)

或者如果模块已命名导出:

import {fs} from 'fs';
Run Code Online (Sandbox Code Playgroud)

例:

//module1.js

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

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

export default function1;
Run Code Online (Sandbox Code Playgroud)

然后:

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

defaultExport();  // This calls function1
function1();
function2();
Run Code Online (Sandbox Code Playgroud)

此外,您应该使用webpack或类似的东西来使用es6 import

  • 这不起作用,因为 fs 既没有默认导出,也没有名为“fs”的导出。`import fs from "fs";` 是正确的语法。 (4认同)
  • @rinogo 回调和异步 API 通过 `import * as fs from 'fs';` 导入,基于 Promise 的 API 通过 `import * as fs from 'fs/promises';` 导入。`fs` 支持 CommonJS 语法和 ES6 模块。您能提供一个使用 `import fs from "fs";` 的示例吗?另外,答案的其余部分只是如何导出/导入函数和默认值的示例。 (4认同)
  • 这个错误的答案怎么会有这么多人点赞呢?请根据上面@KonradHöffner 的评论更新此答案。 (3认同)

phi*_*hag 39

node.js中的ES6模块支持是最新的; 即使在最前沿的版本中,它仍然是实验性的.使用节点10,您可以使用--experimental-modules标志启动节点,它可能会起作用.

要在较旧的节点版本(或标准节点10)上导入,请使用CommonJS语法:

const fs = require('fs');
Run Code Online (Sandbox Code Playgroud)

  • 如果您真的想要使用ES6导入,那么RobertoNovelo的答案将是更好的选择. (2认同)

小智 19

基于 RobertoNovelo 的回答:

import * as fs from 'fs';
Run Code Online (Sandbox Code Playgroud)

是目前最简单的方法。

它用Node.js的项目(Node.js的v10.15.3),以测试ESM,允许使用import

  • 我有 v10.16.0,它对我不起作用,给出错误 - `unexpected token *` (4认同)

nom*_*mis 14

要使用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稳定性),不建议用于生产...但我仍然可能在产品中使用它:D

这是节点10 esm文档,请喜欢并接受我的答案,因为它是唯一正确的答案:D:D


小智 9

转到 package.json 文件并添加:

"type": "module"
Run Code Online (Sandbox Code Playgroud)

这对我有用!