将JavaScript类导入另一个类时出现意外标识符{classname}
我正在使用Node v10.11.0并且正在从Ubuntu 18.04运行此脚本。
I'm using Node v10.11.0 and am running this script from Ubuntu 18.04.
我的文件设置如下所示:
My file setup looks like this:
main.js
import Login from './Login.mjs';
class Main {
constructor() {
const login = new Login();
login.login();
}
}
new Main();
Login.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
使用以下命令:
I'm calling the main.js
with the following command:
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)
^^^^^
属于登录
但我似乎无法在问题中将其格式化。
The ^^^^^
belongs under the Login
but I can't seem to get it formatted right here in the question.
我也试图保存 Login.mjs
as Login.js
并调用 main.js
没有 - experimental-modules
但这会导致完全相同的错误。
I also tried to save the Login.mjs
as Login.js
and calling the main.js
without the --experimental-modules
but this leads to the exact same error.
这个问题是类似于这个问题。正如我上面所说,我已经尝试了那里所描述但没有运气。
This question is similar to this question. As I said above I already tried what is described there but no luck.
原生ES模块( import
和 export
语句)只能在Node中的.mjs文件中使用。为了使用它们,入口点应命名为 main.mjs
。
Native ES modules (import
and export
statements) can only be used in .mjs files in Node. In order to use them, entry point should be named main.mjs
.
为了使用ES模块.js文件,ES模块应该被转换为回退到 require
,或者本地使用自定义ES模块加载器。由于后者不是本机Node.js行为,因此不建议将其作为经验法则推荐。
In order to use ES modules in .js files, ES modules should either be transpiled to fall back to require
, or used natively with custom ES module loader. Since the latter isn't native Node.js behaviour, it cannot be recommended as a rule of thumb.