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

标签 javascript

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

export function test1() {
  // do something
}

export function test2() {
  // do something
}

我正在将 script1.js 导入 script2.js:

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

functions.test1();
functions.test2();

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

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

换句话说,我正在寻找的是等同于:

import * from './script1.js';

test1();
test2();

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

最佳答案

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

export function test1() {
  // do something
}

window.test1 = function test1() {
  // do something
};

然后,当导入模块时,函数将在全局可用:

import './script1.js';

但这是一个反模式:

but if I have a lot of exports, then the desconstruction will be tedious.

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

关于Javascript 将文件中的所有模块作为全局变量导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65202503/

相关文章:

javascript - Angular.JS 延迟动画的路线更改

javascript - D3.js:在理解 Bostock 的可排序条形图示例中的延迟调用功能和链接时遇到一些问题

javascript - 在 Javascript 中使用特殊键进行按键操作

javascript - 如何自定义 Strapi 管理面板

javascript - 函数返回 bool 时如何使用不同的 SweetAlert?

javascript - 在 JavaScript 中定义随机化比率

javascript - 云 Firestore : Retrieve dynamic field keys with Javascript

javascript - jQuery 特别事件 API

javascript - Omniture - 是否可以计算每个特殊标记链接的点击次数?

javascript - npm run build 上的 Babel-Loader 语法错误