2014-12-04 63 views
1

我用戶FilesaverJS用於在客戶端保存JSON文件。文件管理器和requireJS:不匹配的匿名定義

我有一個錯誤,當我加載Filesaver JS與RequireJS:

Uncaught Error: Mismatched anonymous define() module: function() { 
    return saveAs; 
} 

我requirejs優化配置文件:

require.config({ 
    paths: { 
     ... 
     blobjs     : "../../libs/blobjs/Blob", 
     .... 
     filesaver    : "../../libs/filesaver/FileSaver", 
    }, 
    shim : { 
     ... 
     blobjs: { 
      exports: "Blob" 
     }, 
     filesaver: { 
      exports: "Filesaver" 
     }, 
     ... 
    }, 

    optimize: 'uglify2', 
    uglify2: { 
     output: { beautify: true }, 
     beautify: { semicolons: false } 
    }, 
    baseUrl     : '../assets/js/', 
    mainConfigFile   : '../assets/js/config.js', 
    name     : 'formbuilder', 
    out      : 'formbuilder.min.js', 
    output : { beautify: true }, 
    preserveLicenseComments : false, 

    include : ['here i include some views template'] 
}); 

而且在我的代碼:

var blob = new Blob([jsonContent], { 
    type: "application/json;charset=utf-8" 
}); 

saveAs(blob, collectionAndFilename['filename'] + '.json'); 

謝謝尋求幫助

回答

1

我有同樣的問題。經過調查,我意識到我正在加載FileSaver文件的腳本標記,並且因爲在FileSaver中調用了define()函數 - 這是一個問題。

這是什麼reauire.js docs指出:

務必通過RequireJS API來加載調用定義的所有腳本()。 請勿在HTML中手動編寫腳本標記以加載其中包含define()調用的腳本。

我裝有requireJS API文件,一切工作就好了... ...

0

這個工作對我來說:

requirejs(["lib/FileSaver"], function(){ 
    console.log("in FileSAver"); 

    var text = createString(); 
    var fileName = getFileName(); 

    var blob = new Blob([text], {type: "text/plain;charset=utf-8"}); 
    window.saveAs(blob, fileName); 

}); 
0

由於FileSaver.js建立名爲AMD模塊,您必須使用它作爲包在require.config文件,像moment圖庫。

require.config({ 
    packages: [{ 
     name: 'moment', 
     location: './js/resources/', 
     main: 'moment' 
    }, { 
     name: 'FileSaver.js', 
     location: './js/resources/',// path where you have placed FileSaver.js file 
     main: 'FileSaver.js' 
    }] 
    }); 

,然後只需要包FileSaver.js

requirejs(["FileSaver.js"], function(FileSaver) { 
    //FileSaver is now available as function 
    console.log(FileSaver); 
    }); 
+0

這並不能解釋的是,OP是得到錯誤。沒有「錯誤的匿名定義」錯誤,解決方案*在設置「packages」時將其解決。接受的答案解釋了OP做錯了什麼。 – Louis 2016-10-14 10:29:14

+0

是的,但如果它幫助任何人,只通過requireJS API加載文件不是一個真正的解決方案,因爲我已經嘗試過了。注意'''filesaver的不正確用法:{exports:「Filesaver」},'''不起作用 – django 2016-10-14 11:15:52

相關問題