Javascript从文件中导入所有模块作为全局变量

Isa*_*ton 4 javascript

在 script1.js 中,我有以下导出:

export function test1() {
  // do something
}

export function test2() {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

我将 script1.js 导入 script2.js:

import * as functions from './script1.js';

functions.test1();
functions.test2();
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以从 script1.js 导入所有模块,并将它们直接放置在 script2.js 的全局变量中。因此我可以直接使用 test1()、test2() 访问它们,而无需将它们放入对象中的中间步骤。

我知道我们可以做到import {test1, test2} from './script1.js';,但是如果我有很多出口,那么解构就会很繁琐。

换句话说,我正在寻找的东西相当于:

import * from './script1.js';

test1();
test2();
Run Code Online (Sandbox Code Playgroud)

上面的代码块是假设的,它不起作用。

Cer*_*nce 5

鉴于您当前的代码,这是不可能的。模块的全部目的是避免隐性的全局污染。要执行类似的操作,您必须将函数显式分配给模块内的全局对象,例如更改:

export function test1() {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

window.test1 = function test1() {
  // do something
};
Run Code Online (Sandbox Code Playgroud)

然后,当模块被导入时,这些功能将在全局可用:

import './script1.js';
Run Code Online (Sandbox Code Playgroud)

但这是一种反模式:

但如果我有很多出口,那么解构就会很乏味。

它确实需要一些样板文件,但不要害怕它 - 在较大的项目中,拥有显式依赖链对于可维护性来说是一个巨大的优势。它还允许进行树摇动,这对于仅具有副作用的模块来说是不可能的(例如分配给全局对象)。