就我对模块系统的理解而言,每当我在文件中执行import 'some_module'
操作时,我总是会得到该模块的相同实例,而不是每次导入时都会得到一个不同的实例。
但如果这是真的,我有点不理解我在一些应用程序中看到的这种模式:
// in a 'config_some_module.js' file
import SomeModule from 'some_module';
SomeModule.attribute = 'something';
export default SomeModule;
// in a different file;
import SomeModule from './config_some_module';
如果我每次导入模块时都会得到相同的实例(而不是新的实例),那么为什么需要重新导出该模块才能使用在前一个文件上完成的配置来访问它呢?
另外,第二个问题:如果不需要该属性,如何确保在第二个文件中导入将在该属性已设置的情况下获得模块?我假设如果两个导入得到相同的实例,那么最终属性将出现在第二个文件的SomeModule
中,但也许我上面提到的模式很有用,因为您可以确定对模块的更改已经应用了吗?
发布于 2018-06-09 05:35:42
您需要使用export
的原因是,否则,config_some_module.js
只会产生副作用。如果你想直接从它获取一个值,你需要export
一个值。如果您没有从config_some_module.js
export
任何东西,那么您需要通过执行以下操作来import
带有副作用的修改后的对象:
// in 'config_some_module.js' file
import SomeModule from 'some_module';
SomeModule.attribute = 'something';
// in a different file;
import './config_some_module'; // introduce side-effect
import SomeModule from 'some_module'; // access modified object
要记住的一个“陷阱”是,无论config_some_module.js
被导入多少次,副作用都只会发生一次。
最后,您在使用者中执行import
语句的顺序并不重要,只要您的使用发生在两者之后。
https://stackoverflow.com/questions/50768605
复制相似问题