考虑到C# / C++打包结构,如何实现将JS类作为单个名称空间导入到单个文件中?
我目前的解决方案是使用一个额外的“包”-script文件,然后封装所有类。请看下面的代码。
这似乎包括大量开销(用每个新类更新包-脚本导出,在每个新类中导入该脚本)。
ClassA.js:
import * as MyPackage from "../MyPackage.js";
export default class ClassA {/* some Class Code */}
export {
ClassA
};MyPackage.js:
import ClassA from "./module/ClassA.js";
import ClassB from "./module/ClassB.js";
export {
ClassA,ClassB
}script.js:
import * as MyPackage from "./MyPackage.js"
let a = new MyPackage.ClassA();这方面的最佳做法是什么?
发布于 2019-06-22 10:47:20
我目前的解决方案是使用一个额外的“包”-script文件,然后封装所有类。
是的,这是最好的做法。" package“脚本文件通常称为index.js,放置在包的目录中,因为这是导入时解析文件夹路径的内容。
在每个新类中导入此脚本
不,你不应该那样做。它引入了一个循环依赖项。只要您的模块不依赖于任何其他类,它就不应该导入任何东西。没有“包声明”,模块是一个独立的文件,它有自己的依赖项。
还请注意,您不应该两次从模块导出类,默认导出就足够了。所以你会用
// mypackage/classA.js:
export default class ClassA {
/* some Class Code */
}
// mypackage/index.js:
export { default as ClassA } from "./classA.js";
export { default as ClassB } from "./classB.js";
// your solution of importing, then exporting works as well.
// script.js:
import * as MyPackage from "./mypackage";
const a = new MyPackage.ClassA();
// or
import { ClassA } from "./mypackage";
const a = new ClassA();https://stackoverflow.com/questions/56714693
复制相似问题