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



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

我的文件设置如下所示:

主.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并在没有--experimental-modules的情况下调用main.js,但这会导致完全相同的错误。

这个问题与这个问题类似。正如我上面所说,我已经尝试了那里描述的内容,但没有运气。

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

为了在.js文件中使用 ES 模块,ES 模块应该被转译回退到require,或者与自定义 ES 模块加载器本机使用。由于后者不是原生 Node .js行为,因此不建议将其作为经验法则。

最新更新