我创建了一个包含许多Thing文件的Things文件夹,然后在Thing文件夹内创建了一个充当“中间模块”的索引。
喜欢这个...
// things/thing1.js
console.log('thing1 loaded');
const thing1 = () => {
console.log('Hi from thing1!');
};
export default thing1;
// things/thing2.js
console.log('thing2 loaded');
const thing2 = () => {
console.log('Hi from thing2!');
};
export default thing2;
// things/index.js
export { default as thing1 } from './thing1';
export { default as thing2 } from './thing2';
当我从中间模块导入任何文件时...
// anotherFile.js
import { thing1 } from '../things';
thing1();
...所有文件都已加载。
# console output
thing1 loaded
thing2 loaded # <-- don't want this to load.
Hi from thing1!
除了...
import thing1 from './things/thing1';
import thing2 from './things/thing2';
...是否可以构造中间模块或导入,以便仅加载要导入的文件?
答案 0 :(得分:2)
设置当前代码的一般方法,不,不可能。每当导入模块时,导入的一切也将被导入(并且其顶层代码将运行)。
一种选择是更改thing1
和thing2
模块,以便它们导出功能,这些功能在运行时会自动加载-这样,它们的初始化就可以在需求,而不是每当它们被导入时(仅通过导入而产生的副作用通常都不是一个好主意-如果入口点可以控制事情何时开始运行则更好):
// things/initThing1.js
export default () => {
console.log('thing1 loaded');
const thing1 = () => {
console.log('Hi from thing1!');
};
return thing1;
};
和
// anotherFile.js
import { initThing1 } from '../things';
const thing1 = initThing1();
thing1();
(或者,如果其他模块从index.js
导入,也可以在中间模块中初始化)