如何在Node中运行带有导入ES6模块的文件

5

我有一个使用webpack搭建的React应用程序,希望同时运行一个在Node中编写输出文件的脚本,例如:

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 在 node 中运行,但它一直抱怨 ES6 的 exports。有人能告诉我如何使用 node 命令运行一个包含 ES6 内容的 js 文件吗?

NODE v10


你的 Node 版本是多少?使用 ^v13 应该不会有问题。 - gschenk
它的 Node 版本是 10。 - sfasfasd
1个回答

0

你的导入/导出语句存在一些小矛盾。

而且你是从一个完全不同的文件中进行导出。你这样做有什么原因吗?

你可以导出一个包含你的类的文件。

export { someClass 

然后您可以使用当前的导入语句进行导入。

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

export default someClass

然后不解构对象导入它:

import some class from './someClass';

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

请注意,当您运行旧的Node版本时,需要一些额外的CLI标志才能运行模块。对于现有的Node (^13),只需设置type: module即可。请参见Hao Wu的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接