связывание import-loader и exports-loader с библиотекой, которая перезаписывает переменную модуля

1

Я пытаюсь загрузить библиотеку аудиокодирования libvorbis.js, которая является компиляцией emscripten vorbis.

libvorbis.js требует выполнения с помощью переменной окна в ее области и оставляет классы, представленные как var без объявления экспорта.

Как правило, было бы легко связать импорт-загрузчик и экспорт-загрузчик для получения такого файла. Using-

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

который откроет объект window как "this" внутри libvorbis.js и выведет VorbisMediaRecorder как возврат к этому, который необходим моим другим модулям/кодам, которые будут запущены позже.

HOWEVER, сама libvorbis.js перезаписывает переменную 'module', которая заставляет экспорт-загрузчик экспортировать

У 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 была записана для включения в качестве скрипта на странице.

Теги:
webpack
emscripten
vorbis

1 ответ

1

Поэтому я решил свою проблему с помощью файлового загрузчика. Он загрузит скрипт точно так же, как файл с помощью src и т.д., Поэтому его можно запустить без проблем.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню