【问题标题】:How to run a file with imported ES6 modules in Node如何在 Node 中使用导入的 ES6 模块运行文件
【发布时间】:2020-02-06 00:38:48
【问题描述】:

我有一个使用 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 文件?

节点 v10

【问题讨论】:

  • 你的节点版本是多少?这应该不是 ^v13 的问题
  • 它是节点版本 10

标签: javascript node.js ecmascript-6 babeljs


【解决方案1】:

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

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

你可以导出一个包含你的类

export { someClass 

然后你可以用现在的 import 语句来导入它。

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

export default someClass

然后在不解构对象的情况下导入它:

import some class from './someClass';

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

请注意,当您运行旧节点版本时,您需要一些额外的 CLI 标志来运行模块。使用当前节点 (^13) 设置 type: module 就足够了。见郝武的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2016-06-10
    • 2019-10-22
    • 2016-09-16
    相关资源
    最近更新 更多