【发布时间】:2019-08-07 12:00:06
【问题描述】:
给定一个导出函数并在其内部逻辑中使用此函数的第 3 方库 - 有没有办法重新定义此函数? 例如:
third-party.js
export function a() {
console.log('a');
}
export function b() {
a();
}
my-module.js
import * as tp from 'third-party';
//Re-define, something like this
Object.defineProperty(tp, 'a', { writable: true, value: () => console.log('c')});
//Call b and get the re-define function called
tp.b(); //Expected output: 'c'
几个亮点:
- 我不需要它用于测试,但用于生产(是的,我知道这将是一个肮脏的 hack)
- 是的,我知道导入是 live read-only views,我正在寻找一种解决方法来克服这个限制
- 不,我不能更改第三方库的代码
- 我需要更改才能真正更改第 3 方的逻辑。我想调用一个调用
a而不是a本身的函数。
【问题讨论】:
-
不,如果
a()调用引用指向本地a变量,则无法不修补代码(可能通过脚本)。 -
这是在什么环境下执行的?您使用的是自定义加载程序、捆绑程序还是其他东西?
-
不,它是纯节点环境。不过,我的脚本有一定程度的灵活性。这意味着我可以捆绑它(我现在不这样做)。
标签: javascript ecmascript-6 es6-modules