【发布时间】:2019-03-03 11:30:55
【问题描述】:
我正在使用node --experimental-modules test.mjs (NodeJs v11.9.0)。
实现同一个类有很多选择,需要终端切换,
switch (process.argv[2]) {
case 'a':
import MyClass from './MyClass-v1.mjs'; break;
case 'b':
import MyClass from './MyClass-v2.mjs'; break;
default:
import MyClass from './MyClass-v3.mjs';
}
import MyClass 上的错误:意外的标识符
PS:使用 isolated import MyClass from './MyClass-v3.mjs'; 时工作正常。
注意:const MyClass = require('./MyClass-v3.mjs') 不适用于现代 Javascript。 (ReferenceError: 要求未定义)。该文件只有一个类定义,
export default class MyClass { ... }
PS:对于 NodeJs,没有像 C_preprocessor 这样的东西吗?旧的预编译器(带有一些 argv 访问权限)在这里就可以了。
【问题讨论】:
-
嗨。可能你需要使用工厂模式en.wikipedia.org/wiki/Factory_method_pattern
-
嗨@VladKosko,有道理...用Node实现它的最佳方法是什么?没有简单的动态加载方法?我的代码也是一种proxy pattern。
-
import 语句只允许在模块的顶层。要导入其他任何地方,请使用
require。 -
为此您需要dynamic import,您不能将导入声明放在开关盒中。不确定节点是否已经支持
import()。 -
@PeterKrauss 您不能使用 ES6 模块进行同步动态导入。鉴于此代码似乎位于您的 main.js 中,异步执行它应该不是问题。
标签: node.js ecmascript-6