javascript - 将 JavaScript 类导入另一个类时出现意外标识符 {classname}

标签 javascript node.js import

我正在使用 Node v10.11.0 并从 Ubuntu 18.04 运行此脚本。

我的文件设置如下所示:

main.js

import Login from './Login.mjs';

class Main {
    constructor() {
        const login = new Login();

        login.login();
    }
}

new Main();

登录.mjs

import readline from 'readline';

class Login {
    constructor() {
        this.username = '';
        this.password = '';
        this.readline = readline.createInterface({
            input: process.stdin,
            output: process.stdout
        });
    }

    login() {
        this.readline.question('What is your username?', answer => {
            this.username = answer;
        });

        this.readline.question('What is your password?', answer => {
            this.password = answer;
        });
    }
}

export default Login;

我正在使用以下命令调用 main.js:

node --experimental-modules main.js

这会导致以下错误:

(node:7280) ExperimentalWarning: The ESM module loader is experimental.
/home/jrenk/Workspace/bitefight/main.js:1
(function (exports, require, module, __filename, __dirname) { import Login from './Login.mjs';
                                                                 ^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Proxy.runInThisContext (vm.js:303:10)
    at Module._compile (internal/modules/cjs/loader.js:657:28)
    at Object.Module._extensions..js 
    (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at createDynamicModule (internal/modules/esm/translators.js:56:15)
    at setExecutor 
    (internal/modules/esm/create_dynamic_module.js:50:23)

^^^^^ 属于 Login 但我似乎无法在问题的此处对其进行格式化。

我还尝试将 Login.mjs 保存为 Login.js 并在没有 的情况下调用 main.js -- experimental-modules 但这会导致完全相同的错误。

这个问题类似于this question.正如我上面所说,我已经尝试过那里描述的内容,但没有成功。

最佳答案

原生 ES 模块(importexport 语句)只能在 Node.mjs 文件中使用。为了使用它们,入口点应该命名为main.mjs

为了在 .js 文件中使用 ES 模块,ES 模块应该被转译为返回到 require,或者与 custom ES module loader 一起使用。 .由于后者不是 native Node.js 行为,因此不能根据经验推荐它。

关于javascript - 将 JavaScript 类导入另一个类时出现意外标识符 {classname},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52677626/

相关文章:

javascript - 使整个列消失

javascript - JSON数组存储之前的数据结果

javascript - php node.js redis session 共享身份验证

ecmascript-6 - noUiSlider ES6 导入

objective-c - 如何将 Swift 代码导入 Objective-C?

sql - Postgresql - 无法将 csv 文件加载到表中

javascript - 遍历 TinyMCE 中当前节点的子节点

javascript - 数字中的前导和尾随零

javascript - 我在理解事件系统时遇到问题

javascript - Conditional slick-carousel 轮播设置