在javascript中,是否可以部分导入;中间模块;?

在javascript中,是否可以部分导入;中间模块;?,javascript,ecmascript-6,Javascript,Ecmascript 6,我创建了一个包含很多东西文件的东西文件夹,然后在东西文件夹内创建了一个索引,作为“中间模块” 像这样 // things/thing1.js console.log('thing1 loaded'); const thing1 = () => { console.log('Hi from thing1!'); }; export default thing1; 当我从中间模块导入任何文件时 // anotherFile.js import { thing1 } from '../

我创建了一个包含很多东西文件的东西文件夹,然后在东西文件夹内创建了一个索引,作为“中间模块”

像这样

// things/thing1.js
console.log('thing1 loaded');

const thing1 = () => {
  console.log('Hi from thing1!');
};

export default thing1;
当我从中间模块导入任何文件时

// anotherFile.js
import { thing1 } from '../things';

thing1();
…所有文件都已加载

#控制台输出
装载的东西

thing2加载了当前代码的一般设置方式,不,这是不可能的。无论何时导入模块,它导入的所有内容都将被导入(并且它们的顶级代码将运行)

一个选项是更改
thing1
thing2
模块,以便它们导出函数,这些函数在运行时自行加载-这样,它们的初始化可以按需运行,而不是在导入时运行(仅仅导入所产生的副作用通常不是一个好主意-如果入口点可以单独控制事情何时开始运行,则效果更好):


(或者,如果其他模块从
index.js
导入,您可以在中间模块中初始化)

当前代码的一般设置方式,不,这是不可能的。每当导入模块时,它导入的所有内容都将被导入(并且它们的顶级代码将运行)

一个选项是更改
thing1
thing2
模块,以便它们导出函数,这些函数在运行时自行加载-这样,它们的初始化可以按需运行,而不是在导入时运行(仅仅导入所产生的副作用通常不是一个好主意-如果入口点可以单独控制事情何时开始运行,则效果更好):


(或者,如果其他模块从
index.js
导入,则可以在中间模块中初始化)

使用树摇动删除未使用的导出,检查没有意义的Webpack;您的
things/index.js
必须加载其所有模块才能导出它们。唯一的方法可能是使用一些绑定器来最小化JavaScript。使用树摇动删除未使用的导出,检查没有意义的Webpackke sense;您的
things/index.js
必须加载其所有模块才能导出它们。唯一的方法可能是使用一些绑定器来最小化JavaScript。
// things/index.js
export { default as thing1 } from './thing1';
export { default as thing2 } from './thing2';
// anotherFile.js
import { thing1 } from '../things';

thing1();
import thing1 from './things/thing1';
import thing2 from './things/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();