簡體   English   中英

用覆蓋模塊變量的庫鏈接imports-loader和exports-loader

[英]chaining imports-loader and exports-loader with a library that overwrites the module variable

我正在嘗試加載名為libvorbis.js的音頻編碼庫,這是vorbis的腳本編譯版本。

libvorbis.js要求在其作用域內使用window變量執行,並且使類暴露為var,而無需導出聲明。

通常,將imports-loader和exports-loader鏈接起來以獲取此類文件很容易。 Using-

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

它將在libvorbis.js中將窗口對象公開為“ this”,並將VorbisMediaRecorder排除在外,這是我其他模塊/代碼稍后需要運行的返回值。

但是,libvorbis.js本身會覆蓋“模塊”變量,從而使exports-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庫被編寫為作為腳本包含在頁面上。

因此,我使用文件加載器解決了我的特殊問題。 它會像使用src等文件一樣加載腳本,因此可以正常運行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM