我想知道在另一个模块中导入模块函数/类的最佳实践是什么,模块本身需要在导入到另一个模块之前调用/初始化它自己的函数/类?我不知道我是否可以清楚地问我的问题!所以让我们把它放在一个例子中。
这是我的模块:
// myModule.js
class MyModule {
constructor() {
// do sth
}
}
let myModule = new MyModule();
这就是我喜欢在另一个模块中导入它的方法:
import MyModule from './myModule';
这实际上工作正常!但正如您所看到的,在myModule.js
文件中,我没有export default
我的MyModule
课程,因为这不是{{1}中发生的唯一事情。文件!我在定义它之后也初始化了类...(我知道即使我将我的类设置为myModule.js
,在将模块导入到其他地方时,初始化仍然可以正常工作...)< / p>
因此,如果没有在我们的模块中设置任何导出内容,或者将类设置为export default
,那么当模块被导入其他地方时一切正常......到目前为止一切都很好!但是如果有的话,我正在寻找最佳实践!
以下是关于此类案件的问题:
export default
,尽管我们在模块中的类之外做了更多的工作(定义类之后发生的初始化工作)? 非常感谢大家!我真的很感激任何帮助:)
答案 0 :(得分:15)
如何提供导入类或其实例?喜欢:
// export class itself
export class MyModule {
constructor() {
// do sth
}
}
// export instance of MyModule directly
export default new MyModule();
// export a factory function if you need more work to be done
// before the instance is created
export function myModuleFactory(...args) { // define e.g. arguments to be passed to constructor
// ... do stuff
const myModule = new MyModule(...args);
// ... do more stuff
return myModule;
}
所以你可以这样做:
// import instance
import instance from './myModule';
// or class
import { MyModule } from './myModule';
// or import factory
import { myModuleFactory } from './myModule';
该怎么做,取决于你想要用你的模块完成什么。如果您希望自己的应用使用MyModule
类对象的一个共享实例,则需要export
和import
如上所示的实例。如果要在不同的上下文中创建多个实例,则可以导出类本身或工厂函数以返回新实例。
为了使它更加干净,您可以将该类保存在另一个单独的文件中,并将import
保存到提供工厂/实例化的模块中。
<强>更新强>
回答您的第一个问题:您可以import
未定义任何export
的模块。将加载模块并执行其逻辑。问题在于,只要它不会改变全局变量(如Web开发中的window
),它就不会产生任何影响,因为模块内部的所有内容都发生在隔离的范围内。您可能已经猜到,让模块更改全局变量远非最佳实践。
答案 1 :(得分:-1)
非常感谢你们的回答。我真的很感激。实际上我对我正在进行的项目感到很困惑,所以也许我无法表达我想要做的事情......
但无论如何,我会自己回答我的问题,或许其他人发现它们很有用:
对于我们将要编写的模块,export default
或export
始终是一个好习惯。因为每一段代码都会有一些结果,对吧?因此,在一个模块中,我们应该考虑我们最终要实现的目标,然后将其导出。导出您的输出,即您希望模块在其他地方导入时提供的内容。
如果您的模块是单个课程,那么它对export default
有好处。否则,正如我在第一个答案中所说,这完全取决于您在模块中将要实现的目标以及您的结果。导出所有结果,效用函数等......
您也可以这样做!但首先想想你的用例。一旦将模块导入其他地方,就会执行其中的所有代码。所以你喜欢做什么,然后导出最终结果。