sfa*_*asd 5 javascript node.js ecmascript-6 babeljs
我有一个使用 webpack 设置的 React 应用程序,并且还希望有一个在节点中运行的脚本以将内容写入输出文件,例如:
脚本.mjs
import fs from 'fs';
import {SomeClass} from './index.js';
const outputFile= fs.createWriteStream(__dirname + '/output.png');
// Writes into output file
Run Code Online (Sandbox Code Playgroud)
并在其中包含以下脚本命令package.json
:
"scripts": {
...
"runFile": "node --experimental-modules test/script.mjs",
...
}
Run Code Online (Sandbox Code Playgroud)
每当我运行它时npm run runFile
,它都会抱怨:
import {SomeClass} from './index.js';
^^^^^^^^^
SyntaxError: The requested module './index.js' does not provide an export named 'SomeClass'
Run Code Online (Sandbox Code Playgroud)
即使它存在于该文件中:
./index.js
export SomeClass from './SomeClass';
我什至曾经node -r esm test/script.js
在node中运行,但它一直抱怨ES6 exports
。有人能告诉我如何使用node
命令运行包含 ES6 内容的 js 文件吗?
节点 v10
您的出口/进口报表中存在细微的不一致。
哦,您正在从一个完全不同的文件导出。您有理由需要这样做吗?
您可以导出包含您的班级的
export { someClass
Run Code Online (Sandbox Code Playgroud)
然后您可以使用当前的导入语句导入它。
更直接的方法是./someClass
使用默认导出从文件中导出
export default someClass
Run Code Online (Sandbox Code Playgroud)
然后导入它而不解构对象:
import some class from './someClass';
Run Code Online (Sandbox Code Playgroud)
后者与文件名非常契合,是大多数人所期望的样式。
请注意,当您运行旧的节点版本时,您需要一些额外的 CLI 标志来运行模块。对于当前节点 (^13),设置type: module就足够了。参见吴浩的回答。