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

Javascript 如何在节点中使用导入的ES6模块运行文件,javascript,node.js,ecmascript-6,babeljs,Javascript,Node.js,Ecmascript 6,Babeljs,我有一个用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中使用以下脚本命令:

我有一个用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

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

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

// Writes into output file
从“/SomeClass”导出SomeClass

我甚至使用了
node-r esm test/script.js
在node中运行,但它一直在抱怨ES6
exports
。有人能告诉我如何使用
node
命令运行一个包含ES6内容的js文件吗


节点v10

您的导出/导入语句中有一点不一致

哦,你是从一个完全不同的文件导出的。你有理由这样做吗

您可以导出包含类的

export { someClass 
然后可以使用当前的导入语句导入它

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

export default someClass
然后在不分解对象的情况下导入它:

import some class from './someClass';
后者非常适合文件名,是大多数人所期望的样式


请注意,运行旧节点版本时,需要一些额外的CLI标志来运行模块。对于当前节点(^13),设置类型:模块就足够了。请看吴浩的回答。

您的导出/导入语句中有一点不一致

哦,你是从一个完全不同的文件导出的。你有理由这样做吗

您可以导出包含类的

export { someClass 
然后可以使用当前的导入语句导入它

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

export default someClass
然后在不分解对象的情况下导入它:

import some class from './someClass';
后者非常适合文件名,是大多数人所期望的样式


请注意,运行旧节点版本时,需要一些额外的CLI标志来运行模块。对于当前节点(^13),设置类型:模块就足够了。见吴浩的答案。

你的节点版本是什么?这不应该是^V13的问题。它是节点版本10。您的节点版本是什么?这不应该是^v13的问题,它是节点版本10