如何在Node中使用导入的ES6模块运行文件

时间:2020-02-06 00:38:48

标签: javascript node.js ecmascript-6 babeljs

我有一个使用webpack设置的react应用,并且还希望有一个在节点中运行的脚本,以将内容写入输出文件,例如:

script.mjs

import fs from 'fs';
import {SomeClass} from './index.js';

const outputFile= fs.createWriteStream(__dirname + '/output.png');

// Writes into output file

,并在package.json中具有以下脚本命令:

"scripts": {
  ...
  "runFile": "node --experimental-modules test/script.mjs",
  ...
}

每当我运行npm run runFile时,都会抱怨:

import {SomeClass} from './index.js';
        ^^^^^^^^^
SyntaxError: The requested module './index.js' does not provide an export named 'SomeClass'

即使该文件中存在该文件:

./ index.js

export SomeClass from './SomeClass';

我什至使用node -r esm test/script.js在节点上运行,但是它一直在抱怨ES6 exports。有人可以指出我如何使用node命令运行包含ES6内容的js文件吗?

NODE v10

1 个答案:

答案 0 :(得分:0)

您的导出/导入语句中有一个小的不一致之处。

哦,您正在从一个完全不同的文件中导出。您有理由这样做吗?

您可以导出包含您的课程的

export { someClass 

然后您可以使用当前的import语句将其导入。

更直接的方法是使用默认导出从您的./someClass文件中导出

export default someClass

然后导入它而不破坏对象:

import some class from './someClass';

后者很适合文件名,并且是大多数人期望的样式。

请注意,当您运行旧节点版本时,需要一些额外的CLI标志来运行模块。使用当前节点(^ 13),只需设置 type:module 。看到吴浩的答案。