使用覆盖模块变量的库链接import-loader和exports-loader

时间:2017-10-26 00:49:13

标签: javascript webpack emscripten vorbis webpack-loader

我正在尝试加载名为libvorbis.js的音频编码库,这是一个emscripten编译版本的vorbis。

libvorbis.js需要在其范围内使用窗口变量执行,并且在没有导出声明的情况下将类暴露为var。

通常,很容易链接import-loader和exports-loader来获取这样的文件。 使用 -

require 'imports-loader?this=>window!exports-loader?VorbisMediaRecorder!libvorbis.js/build/libvorbis.js'

将窗口对象公开为'这个'在libvorbis.js中,取出VorbisMediaRecorder作为返回,这是我以后运行的其他模块/代码所需要的。

但是,libvorbis.js本身会覆盖'模块'变量从出口

搞砸了出口装载机

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库被编写为包含在页面上的脚本。

1 个答案:

答案 0 :(得分:1)

所以我使用文件加载器解决了我的特殊问题。它会像src等文件一样加载脚本...因此它可以毫无问题地运行。

# libvorbis must be resolved in window scope, use the file-loader
require 'file-loader?name=[name].[ext]!libvorbis.js/build/libvorbis.js'