我正在尝试加载一个名为 libvorbis.js 的音频编码库,它是 vorbis 的 emscripten 编译版本。
libvorbis.js 需要在其作用域内使用 window 变量执行,并将类作为 var 公开而没有导出声明。
通常链接imports-loader 和exports-loader 来获取这样的文件很容易。使用-
require 'imports-loader?this=>window!exports-loader?VorbisMediaRecorder!libvorbis.js/build/libvorbis.js'
这会将窗口对象公开为 libvorbis.js 中的“this”,并将 VorbisMediaRecorder 作为返回到 this ,这是我的其他模块/代码稍后运行所需的。
但是,libvorbis.js 本身会覆盖“模块”变量,这会导致 export-loader 无法导出
libvorbis.js 在它的代码中有这个检查
// node.js Environment
var module;
if (module && module.exports) {
makeVorbisEncoderModule({}, module);
}
// Web Worker Environment
if (!module && this.document === undefined) {
VorbisWorkerScript.main(this);
}
这会覆盖导致 webpack 抛出此错误的模块
commons.js:142 TypeError: Cannot set property 'exports' of undefined
因为它试图运行
/*** EXPORTS FROM exports-loader ***/
module.exports = VorbisMediaRecorder;
关于如何解决这个问题的任何想法?我真的不想分叉 libvorbis 并修改它的源代码。
libvorbis.js 库被编写为作为脚本包含在页面上。